所以我从文件中逐个读取字符:
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,更重要的是:我该如何解决?
答案 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';