2012-11-14 127 views
0

这是我的代码:STRCMP结果时字符串相等

 if(strcmp(pch,map[i].name)==0){ 
      printf("Equal\n"); 
      return 0; 
     } 

pch被从文件中读取,map[i].name有64 已知大小这个伟大的工程的字符串长度超过64小时比较这两个字符串以下尺寸63:

file11111111111111111111111111111111111111111111111111111111111

file11111111111111111111111111111111111111111111111111111111111 

一切是桃色和结果š预期是相等的,但是当这两个(尺寸64)进行比较:

file111111111111111111111111111111111111111111111111111111111111

file111111111111111111111111111111111111111111111111111111111111 

返回是假的。 我想这样做的:

 if(strncmp(pch,map[i].name,64)==0){ 
      printf("Equal\n"); 
      return 0; 
     } 

而且它确实工作的64确切大小的字符串,但对于字符串 更小的结果是随机的。 我在这里处理什么样的诡计?

编辑:这是全码:

char * pch; 
    char tempFilesNeeded[100*64+100]; 
    strcpy(tempFilesNeeded,map[i].filesNeeded); 
    pch = strtok(tempFilesNeeded,","); 
    while (pch != NULL) 
    { 
     if(strcmp(pch,map[i].name)==0){ 
      printf("Equal\n"); 
      return 0; 
     } 

     pch = strtok (NULL, ","); 
    } 

回答

9

好吧,如果这是

char pch[64]; 

那么你不能有64个可见字符在那里,因为需要终止的最后一项。如果在该数组中有"file111111111111111111111111111111111111111111111111111111111111",则它不会终止,并且调用strcmp()会调用未定义的行为。

此外,作为一个小点,说strcmp()返回“false”是错误的,因为它的返回值是而不是布尔值。它返回两个第一个不同字符之间的关系;如果没有字符不同的字符串是相等的,那么它返回零。

+0

它是char * pch。请查看我的编辑 – Tom

+0

@Tom“map [i] .name已知大小为64”,所以他的观点仍然存在。 – xiaoyi

+0

@Tom你不能把64字符长度的字符串放在64长度的字符数组中。 – xiaoyi

5

如果一个或两个您的阵列具有64的确切尺寸,你错过了最后的“\ 0”结尾的字符串。