为什么strcmp在这种情况下不返回0?

时间:2012-04-13 16:06:30

标签: c strcmp

所以我从文件中逐个读取字符:

char temp[3];

temp[0] = nextchar;
printf("%c",temp[0]); //prints %

temp[1] = nextchar = fgetc(srcptr);
printf("%c",temp[1]); //prints 2

temp[2] = nextchar = fgetc(srcptr);
printf("%c",temp[2]); //prints 0

if(strcmp(temp, "%20") == 0) { printf("%s","blahblah"); }

理想情况下,这应该在最后打印“blahblah”。但事实并非如此。那么为什么strcmp返回0,更重要的是:我该如何解决?

3 个答案:

答案 0 :(得分:9)

你需要null终止temp。

修改

char temp[3];更改为char temp[4]; temp[3] = 0;

答案 1 :(得分:6)

请改用memcmp,因为strcmp要求两个字符串都为'\0' - 已终止(并且temp不是):

if(memcmp(temp, "%20", sizeof(temp)) == 0) { printf("%s","blahblah"); }

答案 2 :(得分:3)

字符串是一个字符数组,以'\ 0'字符结尾。由于您的tmp数组可以包含三个字符,并且它们都不是终止空字符,因此strcmp(以及任何其他字符串函数)会认为它继续进行,读取内存超过分配的空间,直到遇到空字符(或因为阅读有限的内存空间而崩溃了。)

字符串“%20”实际上是字符:'%','2','0','\ 0'

所以解决它的最简单方法是将tmp更大一些,并将'\ 0'分配给最后一个元素:

char tmp[4];
...
tmp[3] = '\0';