2017-06-21 59 views
0

我想學習c主函數調用一些其他函數返回一個數組(例如字符串類型)。不兼容指針整數轉換錯誤

#include <stdio.h> 
#include <stdlib.h> 
#include <string.h> 

char* array_return(char* name); 

int main(){ 
    char* name="orange"; 
    char* A; 
    A=array_return(name); 
    free(A); 

    printf("%s\n","Check stored values in A"); 
    int k,n; 
    n=10; 
    for (k=0; k < n; k++) { 
     printf("%s\n",A[k]); 
    } 

    return 0; 
} 


char* array_return(char* name){ 
    int k,n; 
    n=10; 
    char* A=malloc(n); 
    char string[100]; 

    printf("%s\n","Store values in A"); 
    for (k=0; k < n; k++) { 
     strcpy(string,"Numer of "); 
     strcat(string,name); 
     strcat(string," are: "); 
     sprintf(string,"%s %i",string,k); 
     A[k]=string; 
     printf("%s\n",A[k]); 
    } 
    printf("%s\n","--------------------------"); 
    return A; 
} 

我試圖商店按照陣列 「A」 值:

Numer of orange are: 0 
Numer of orange are: 1 
Numer of orange are: 2 
Numer of orange are: 3 
Numer of orange are: 4 
Numer of orange are: 5 
Numer of orange are: 6 
Numer of orange are: 7 
Numer of orange are: 8 
Numer of orange are: 9 

不過,我得到以下一些警告

warning: format specifies type 'char *' but the argument has type 
'char' 

incompatible pointer to integer conversion assigning to 'char' 
    from 'char [100]' [-Wint-conversion] 

而且,我得到以下錯誤,當我運行程序:

Segmentation fault: 11 

如果有人可以幫助我調試此代碼,我將非常感激。

+1

您無法將數組傳遞給函數或從函數傳遞數組。但你可以傳遞一個指針。閱讀[問]並使用調試器。 – Olaf

+1

你的代碼有很多問題。 – BLUEPIXY

+1

「*例如字符串類型*」在C中沒有類型「字符串」 – alk

回答

3

所以你的代碼存在很多問題。與你的錯誤信息有關的是因爲A[k]不是字符串,你試圖將它打印出來。

printf("%s\n",A[k]); 

A[k]是存儲器的k個元素指向A並且由於A被聲明爲char *這意味着A[k]char類型。要做你想做的事情,你需要A實際上被宣佈爲char **這樣。

char **A=malloc(sizeof(*A)*n); // We need n lots of what A points to 

但你的代碼仍然不是技術上的工作,因爲分配給string只是A[k]副本什麼string點到的A各部分,使得他們都會是相同的。也就是說,直到該功能完成,然後您進入未定義行爲的領域,因爲string使用的內存不再有效。

所以你想要做的是將string中的字符串複製到A[k]指向的新字符串中。最簡單的方法是使用strdup,因爲這將爲您的字符串分配空間並將其複製到一個函數調用中。

A[k]=strdup(string); 

或者,你可以拋棄string完全和A[k]分配內存和建設要直接在給它的字符串。

+0

謝謝@Chris的建議和澄清。 – Curiosity

相關問題