为什么 strchr 不将程序带入 if 条件?
Why does the strchr not take the program into an if condition?
我正在尝试 运行 下面的代码,但是在执行过程中,代码没有进入 if 条件。
为什么代码在运行时间内没有进入if条件?我已经标记了问题情况。
运行 这个节目在 Windows 10。
线程模型:posix
gcc 版本 5.1.0 (tdm64-1)
我试过使用三元运算符和带有不同字符串的 if 语句,在这种情况下 strchr 工作正常。
#include <stdio.h>
#include <string.h>
#include <stdlib.h>
void main() {
static char str[] = "hello world";
static char inputTime[] = "12:05:10PM";
char *result = strchr(str, 'w');
long int tempNum = 0;
char *token, tempStr[10], delimit[] = ":";
if (strchr(str, 'w'))
printf("\nFound w");
else
printf("\nDid not find w");
(strchr(inputTime, 'P')) ? printf("\nTrue") : printf("\nFalse");
token = strtok(inputTime, delimit);
if (strchr(inputTime, 'P')) {
printf("Found PM\n");
tempNum = strtol(token, NULL, 10);
if (tempNum != 12)
tempNum += 12;
sprintf(tempStr, "%lu", tempNum);
}
printf("\ntempStr: %s", tempStr);
}
上面的代码给出了这个输出:
C:\Users\XX\Documents\Tests\c-programming>a.exe
找到w
正确
tempStr: σ@
strtok
函数将给定的输入字符串拆分为标记。它通过修改要标记化的字符串、放置一个空字节代替要搜索的分隔符来实现。
所以在调用 strtok
之后,inputTime
看起来像这样:
{ '1','2','[=10=]','0','5',':','1','0','P','M','[=10=]' }
一个空字节被放置在第一个 :
的位置。所以如果你要打印 inputTime
你会得到 12
,这意味着你不会找到 P
.
因为输入字符串被修改,所以在调用strtok
.
之前,你应该搜索P
我正在尝试 运行 下面的代码,但是在执行过程中,代码没有进入 if 条件。 为什么代码在运行时间内没有进入if条件?我已经标记了问题情况。
运行 这个节目在 Windows 10。 线程模型:posix gcc 版本 5.1.0 (tdm64-1)
我试过使用三元运算符和带有不同字符串的 if 语句,在这种情况下 strchr 工作正常。
#include <stdio.h>
#include <string.h>
#include <stdlib.h>
void main() {
static char str[] = "hello world";
static char inputTime[] = "12:05:10PM";
char *result = strchr(str, 'w');
long int tempNum = 0;
char *token, tempStr[10], delimit[] = ":";
if (strchr(str, 'w'))
printf("\nFound w");
else
printf("\nDid not find w");
(strchr(inputTime, 'P')) ? printf("\nTrue") : printf("\nFalse");
token = strtok(inputTime, delimit);
if (strchr(inputTime, 'P')) {
printf("Found PM\n");
tempNum = strtol(token, NULL, 10);
if (tempNum != 12)
tempNum += 12;
sprintf(tempStr, "%lu", tempNum);
}
printf("\ntempStr: %s", tempStr);
}
上面的代码给出了这个输出: C:\Users\XX\Documents\Tests\c-programming>a.exe
找到w
正确
tempStr: σ@
strtok
函数将给定的输入字符串拆分为标记。它通过修改要标记化的字符串、放置一个空字节代替要搜索的分隔符来实现。
所以在调用 strtok
之后,inputTime
看起来像这样:
{ '1','2','[=10=]','0','5',':','1','0','P','M','[=10=]' }
一个空字节被放置在第一个 :
的位置。所以如果你要打印 inputTime
你会得到 12
,这意味着你不会找到 P
.
因为输入字符串被修改,所以在调用strtok
.
P