2014-11-05 15 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