2014-11-05 34 views
0

我有一個指定特定指針到另一個字符序列(字符串)的問題;字符指針數組訪問字符序列

#include<stdio.h> 
void setInformations(char *informations[], char *contests_name[]); 
int main(void) { 
    char *informations[]={"","","",""}; 
    char *contests_name[]={"cycle_race","swim","running race"}; 
    int totalTime=0; 
    setInformations(informations,contests_name); 
    getch(); 
    return 0; 
} 

void setInformations(char *informations[], char *contests_name[]) { 
    printf("Competitor's name: "); 
    scanf("%s",*informations[0]); 
    printf("%s",informations[0]); 
} 

我知道,問題是char類型的指針分配的字符串。我怎樣才能取代這個(strcpy?)

+0

首先你需要一個輸入緩衝區。 – 2014-11-05 15:33:27

+0

我不清楚你在問什麼。我可以告訴你在那個scanf中有一個*你不需要它的地方 - 如果它是* informations [0],那麼你會在char(「%c」)中讀取。代碼的哪部分不起作用? – 2014-11-05 15:36:52

+0

Horvath的評論意味着信息中的每個條目都需要有足夠的空間來存儲輸入 - 「」沒有空間存儲任何內容。 – 2014-11-05 15:38:10

回答

0

這裏:scanf("%s",*informations[0]);,你正試圖在只讀存儲器中寫入。 所以,你必須在主分配內存:

int stringSize = 30; // example of length 
char* informations[3]; 
informations[0] = malloc(stringSize); 
informations[1] = malloc(stringSize); 
informations[2] = malloc(stringSize); 

//initialyse the strings to "" : 
informations[0][0] = '\0'; 
informations[1][0] ='\0'; 
informations[2][0] ='\0'; 

在setInformations(,你必須刪除*給scanf函數的內存中寫的ADRESS)。正確的語法:scanf("%s",informations[0]);

0

就拿*出scanf函數的:

scanf ("%s", informations[0]); 

...併爲信息陣列

char* informations[NUMBER_OF_INFORMATIONS][MAX_NAME_LENGTH] = {{'\0'}}; 

分配空間,所以scanf函數將有空間放於信息。

+0

謝謝。 ... char *信息[4] [20];並添加scanf(「%s」,信息);奇怪的是當我試圖做信息[0]它提示我一個錯誤 – A000396 2014-11-05 16:07:21

+0

你做了什麼信息[0],你得到什麼錯誤? 我跑了它沒有錯誤。我確實必須將函數的參數更改爲char信息[4] [20]。我敢肯定,你可以用鑄造來解決這個問題。 – 2014-11-05 19:44:28