#include <stdio.h>
#include <string.h>
int main()
{
char *input[1000];
char *word;
int i = 0;
while (scanf("%s", word) != EOF)
{
input[i] = word;
i++;
}
printf("%s ", input[0]);
printf("%s ", input[1]);
printf("%s ", input[2]);
}
例如,如果输入是“我的名字是”,则输出将是“is is is”而不是“我的名字是”。任何人都可以指出我的代码中的错误。
答案 0 :(得分:3)
这里有一些问题,让我试着解决它们
使用以下命令声明一个char指针数组 但那些指针并没有指向任何地方,或者说它们是指向的 指着永远;-)。
char *input[1000];
现在你声明一个指针,它留下未初始化的点,指向任何地方
char *word;
现在你使用未初始化的指针
从键盘上读取while (scanf("%s", word) != EOF)
您需要做什么为您所阅读的内容分配内存
首先要有一个临时缓冲区来从键盘上读取
char word[100];
现在从键盘读取时复制word的内容并进行分配 记忆内容。
input[i++] = strdup(word);
不要忘记释放输入[]指向的内存,它也是 如果你初始化输入[]指针,那么你可以在它们之间进行区分 使用了指针和未初始化的指针。
char* input[1000] = { NULL };
答案 1 :(得分:0)
您尚未为word
分配内存。代码调用未定义的行为。
像这样分配一些记忆:
int stringSize = 10;
char *word = malloc(sizeof(char)*stringSize );
或
char word [10];
答案 2 :(得分:0)
word是指向字符数组的指针,它将指向您的第一个输入&#34; My&#34;在第一次迭代。这意味着:
word = "My";
input[0] = word;
input[0] = "My"; //as word and input[0] now point to the same memory location
然后,您将修改存储在单词所指向的内存中的值:
input[0] = word;
word = "name";
input[1] = word;
字,因为指针没有改变,只有它指向的值已经改变。在第二次迭代中:
input[0] = word = "name"; //as the memory location of word doesn't change
input[1] = word = "name"; //any pointer set to word will point to the same char array
你的第三次迭代做了完全相同的事情,导致输出为&#34; is is is&#34;。
首先,您应该使用自己的大小/内存来定义单词:
char word[64] = NULL; //arbitrary size that's bigger than your largest length word
对于此示例,您可以使用:
char input[5][64] = { NULL };
但我建议稍后使用动态分配的内存进行输入。
由您决定如何将单词内容复制到输入数组,但可能包括使用strcpy:
int i = 0;
while (scanf("%s", word) != EOF){
strcpy(input[i], (const char*)word);
i++;
}