2013-04-28 51 views
0

我剛剛回來在C開發的日食和即時通訊有大問題我不知道如何解決,不記得我以前有這樣的時候開發之前。反正我會點U至2個問題(我在我的例子易後在這裏):C語言:字符陣列的問題和警告通過eclipse

#include <stdio.h> 

int change_array(char *str, char *a[]) { 
    a[0] = "changed [0]"; 
    if (fgets(str, 200, stdin) != NULL) { 
    } 
    return 0; 
} 

int main() { 
    char str[200]; 
    char a[15][200]; 
    change_array(str, a); 
    printf("a[0]: %s\n", a[0]); 
    printf("str: %s\n", str); 
    return 0; 
} 
  1. 獲得一致警告「change_array(STR,一)」:傳遞參數2不兼容指針類型'change_array'[默認啓用] - 爲什麼?
  2. 運行我 '做全無' 的代碼示例輸出後是:
    • 一些值
    • 一個[0]:< -------有線字符出現
    • STR:some-值
+0

嘗試使用strcpy爲字符串賦值。 strcpy(a [0],「changed [0]」) – marcadian 2013-04-28 22:36:24

+0

發佈完整警告: ../test.c:13:2:warning:從不兼容的指針類型中傳遞'change_array'的參數2 [啓用默認] ../test.c:3:5:注意:期望的'char **'但參數的類型'char(*)[200]' – Popokoko 2013-04-28 22:36:59

+0

謝謝marcadian,但我想明白什麼是問題,給硬編碼的價值不是我所需要的。 – Popokoko 2013-04-28 22:38:06

回答

1

的問題是在這裏... int change_array(char *str, char *a[])

a尺寸是未定義的,所以它不知道步進多遠*aa是一個指向char的指針數組。但是,您傳入的是200個字符的數組。因此,不兼容的類型錯誤。

我相信您的問題消失與...

int change_array(char *str, char (*a)[200])

在這種情況下a是一個指向的200個字符,現在編譯器知道多遠步驟的a

每個索引的數組
+0

Iv'e剛剛嘗試過,代碼不在線編譯:a [0] =「changed [0]」; – Popokoko 2013-04-28 22:44:09

+0

如果你把它改成'strncpy(a [0],「changed [0]」,sizeof(a [0]));'??? – 2013-04-28 22:46:35

+0

+1(在代碼和使用正確的字符串複製註釋) – WhozCraig 2013-04-28 22:47:29