strcmp不会在相同的'上返回0串

时间:2015-11-19 21:40:02

标签: c strcmp

char c;
char unprocessed_instruction[9];
int i;

for (i=0; i<num_tasks; i++){
    c = fgetc(fp);
    int j = 0;
    while (c != ' '){
        unprocessed_instruction[j]  = c;
        j = j + 1;
        c = fgetc(fp);
    }
    char instruction[j];
    for (int i=0; i<j; i++){
        instruction[i] = unprocessed_instruction[i];
    }
    for (int i=0; i<j; i++){
        printf("%c\n", instruction[i]);
    }
    int i = strcmp(instruction, "initiate");
    printf("%i\n", i);
}

因此代码将初始字符存储在有界数组的文本文件中(9是任何输入的最大大小),然后移动到实际输入大小的数组中,如果它恰好更小。例如,如果输入是&#34;则启动&#34;然后将char指令[]初始化为大小8.这样可以正常工作,因为我通过打印数组的元素来测试它,但是数组之间的strcmp和&#34;发起&#34;不回0.这是为什么?

1 个答案:

答案 0 :(得分:2)

  

输入是“启动”,例如,然后是char指令[]   初始化为8号

您无法将其传递给strcmp,因为strcmp期望以null结尾的字符串。由于字符串“initiate”中有8个字符,因此存储它的数组必须至少具有9的大小,以便为null终止符提供空间 - 应该跟随最后一个字符。