C 在不包含string.h的情况下使用strtok,请解释其行为
所以在过去的几个小时里,我一直在试图找出为什么在使用strtok()打印新标记的字符串时出现seg错误。最后我意识到我没有包括string.h。添加这条线后,我得到了预期的行为,没有更多的分段故障。。。耶!然而,如果有人能解释我所经历的行为并回答以下问题,我是c新手(虽然不是编程)C 在不包含string.h的情况下使用strtok,请解释其行为,c,unix,C,Unix,所以在过去的几个小时里,我一直在试图找出为什么在使用strtok()打印新标记的字符串时出现seg错误。最后我意识到我没有包括string.h。添加这条线后,我得到了预期的行为,没有更多的分段故障。。。耶!然而,如果有人能解释我所经历的行为并回答以下问题,我是c新手(虽然不是编程) 为什么调用strtok()时没有收到错误,而它没有包含在内 我最近读到,如果不包括string.h,将使用默认的方法签名。但是,我想使用strtok()的默认sig,那么为什么我仍然得到这种未定义的行为呢 char
char str[]= "ls -l";
char * p = strtok (str, " ");
printf ("%s\n",p);
strtok()
返回的是一个整数,因此您将有符号整数分配给指针,然后尝试取消对指针的引用,这是未定义的行为,可能会导致分段错误
另外,如果未首先检查返回的指针是否为空,则切勿尝试从strtok()
访问该指针
char str[] = "ls -l";
char *p = strtok (str, " ");
if (p != NULL)
printf ("%s\n", p);
因为当找不到令牌时,它返回
NULL
。你能添加编译的代码吗?我现在明白了,c是一种有趣的语言,感谢你澄清了这一点。一旦你习惯了像c程序员一样思考,你会发现其他编程语言是如此愚蠢,我不喜欢任何编程语言,因为我喜欢c。我主要是java,还有一点c#的应用程序开发。我希望我是从c开始的。我将在43秒后接受你的答案,当我能够:)你的编辑我知道:)刚刚给出了一个快速的代码示例