2015-11-19 67 views
-1
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是任何输入的最大尺寸),并且然后移动到一个数组返回0那是实际输入的大小,如果它恰好较小。例如,如果输入是“启动”,那么char指令[]被初始化为大小8.这可以很好地工作,因为我测试时打印了数组的元素,但数组和“启动”之间的strcmp不返回0.为什么呢?的strcmp不上“相同”的字符串

+2

字符串不是简单的字符数组 –

+4

你永远不会终止任一字符串。你现在很幸运,你不会因为分段错误或类似错误而崩溃。 –

+1

您是否尝试过'printf(“%s \ n”,instruction);'以确保字符串实际上是相同的? – immibis

回答

2

输入为“开始”,例如,然后炭指令[]是 初始化为大小8

不能传递到strcmp因为strcmp预计空终止字符串。由于字符串“initialization”中有8个字符,因此存储它的数组必须至少具有9的大小,才能为空终止符留出空间 - 这应该在最后一个字符之后。

+0

谢谢,它现在有效。 – dbalagula23

+1

@ dbalagula23细节:我希望你没有通过改变数组大小来“修复”它。从8到9是不够的。这个答案说''指令[]'仍然需要一个空字符。 – chux