strcmp 在 'identical' 字符串上没有 return 0
strcmp doesn't return 0 on 'identical' strings
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 是任何输入的最大大小),然后移动到一个与实际输入大小相同的数组中,如果恰好变小。例如,如果输入是 "initiate",则 char 指令 [] 被初始化为大小 8。这工作正常,因为我通过打印数组的元素来测试它,但是数组和 [=15 之间的 strcmp =] 不是 return 0。这是为什么?
input is "initiate", for example, then char instruction[] is
initialized to size 8
您不能将其传递给 strcmp
,因为 strcmp
需要以空字符结尾的字符串。由于字符串 "initiate" 中有 8 个字符,存储它的数组必须至少有 9 个大小,以允许 space 作为空终止符 - 它应该跟在最后一个字符之后。
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 是任何输入的最大大小),然后移动到一个与实际输入大小相同的数组中,如果恰好变小。例如,如果输入是 "initiate",则 char 指令 [] 被初始化为大小 8。这工作正常,因为我通过打印数组的元素来测试它,但是数组和 [=15 之间的 strcmp =] 不是 return 0。这是为什么?
input is "initiate", for example, then char instruction[] is initialized to size 8
您不能将其传递给 strcmp
,因为 strcmp
需要以空字符结尾的字符串。由于字符串 "initiate" 中有 8 个字符,存储它的数组必须至少有 9 个大小,以允许 space 作为空终止符 - 它应该跟在最后一个字符之后。