gpt4 book ai didi

c - 为什么 strchr 不将程序带入 if 条件?

转载 作者:太空宇宙 更新时间:2023-11-04 03:13:06 24 4
gpt4 key购买 nike

我正在尝试运行以下代码,但在执行期间,代码没有进入 if 条件。为什么代码在运行时不进入if条件?我已经标记了问题情况。

在 Windows 10 上运行此程序。线程模型:posixgcc 版本 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','\0','0','5',':','1','0','P','M','\0' }

空字节被放置在第一个 : 的位置。因此,如果您要打印 inputTime,您将得到 12,这意味着您不会找到 P

因为输入的字符串被修改了,你应该搜索Pbefore调用strtok

关于c - 为什么 strchr 不将程序带入 if 条件?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54503956/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com