比较字符[]不起作用

时间:2013-12-25 22:59:38

标签: c strcmp

我有strcmp功能的问题(同样的问题是here,但没有好的答案)。如果我比较两个相同的字符串,但是一个字符串来自结构,则该字符串被错误地"翻译"汇编代码。结构中的每个char []都是随机的3个字符。 Picture of strcmp.asm

#define CONS 60

typedef struct LinkCity{
    char city[CONS];           // i get this char[] from file by using fgets()
    struct LinkCity* next;
} tLinkCity;
/***************************************/
    typedef struct {
        int NumberOfCity;
        tLinkCity* Link;
        double** distances;
    } tDatabaze;
/***************************************/
int GetIndexOfCity(tDatabaze* db, char * city){

    printf("%s %s", db->Link->city, city); //   > Barcelona\n Barcelona (yes, here is a newline)
    str = strcmp(db->Link->city, city);    //   str = 1  (=it should be 0)
}

2 个答案:

答案 0 :(得分:1)

如果我没有弄错,函数fgets也会将新行字符读入数组。所以我认为两个数组彼此不相等的原因是使用fgets读取的数组包含新行字符。

答案 1 :(得分:1)

尝试在比较之前从字符串末尾删除换行符,这是一个简单的函数来执行此操作:

void removeNLine(char* string)
{
        int i ;
        for(i = strlen(string) ; i > 0 ; i--)
               if(string[i] == '\n')
                     string[i] = '\0';
}