2015-11-19 89 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