用C语言逐句逐句读单词

用C语言逐句逐句读单词,c,arrays,string,C,Arrays,String,我试图通过将每个单词放入一个数组,一个接一个地读入用户输入的句子中的单词,但是我无法想出一个好的解决方案 我试过: printf("Enter your sentence: "); while(scanf("%s", word) != EOF) { wordArray[i] = word; i ++; } 其中,wordArray是字符串数组,i是整数,word是字符串 我本想读一个句子中的每个单词,然后把它放到数组中 例如,如果我

我试图通过将每个单词放入一个数组,一个接一个地读入用户输入的句子中的单词,但是我无法想出一个好的解决方案

我试过:

    printf("Enter your sentence: ");

    while(scanf("%s", word) != EOF)
    {
       wordArray[i] = word;
       i ++;
    }
其中,wordArray是字符串数组,i是整数,word是字符串

我本想读一个句子中的每个单词,然后把它放到数组中

例如,如果我输入了“I am Mark”,我希望这段代码能够:

字数组[0]中的“I”

wordArray[1]中的“am”

wordArray[2]中的“标记”


但是,这种方法不起作用,所以任何人都可以给我一种方法来逐个阅读句子中的每个单词吗?

在C中不能复制这样的字符串。要将字符串从一个字符数组复制到另一个字符数组,必须使用

但是,您必须注意,char数组对于输入的单词来说足够大,因此声明可能看起来很简单

char word[256];
char wordArray[10][256];
为了防止缓冲区溢出,您应该检查索引
i
,并为

while(i<10&&scanf(“%255s”,word)!=EOF)
{
strcpy(字数组[i],字);
i++;
}

不能使用赋值运算符将字符串赋值给其他字符串,就像其他数据类型(如int、float)一样。您应该使用strcpy()库函数,它需要 string.h头文件。您的代码应该是:

printf("Enter your sentence: ");

    while(scanf("%s", word) != EOF)
    {
       strcpy(wordArray[i],word);
       i ++;
    }

wordArray
声明为
n
的数组,例如指向
char
的指针,并为每个指针分配内存。比如说,每个20字节:

char word[20];   
int n = 10;
char *wordArray[n];
for(int i = 0; i < n; i++)
    wordArray[i] = malloc(20);
char-word[20];
int n=10;
字符*字数组[n];
对于(int i=0;i
然后你的代码就可以工作了

printf("Enter your sentence: ");
int i = 0;
while(scanf("%s", word) != EOF && i < n)
{
  strcpy(wordArray[i], word);
}  
printf(“输入您的句子:”);
int i=0;
while(scanf(“%s”,word)!=EOF&&i

不要忘记释放
元素。

在C中创建字符串数组的方法很少:

const char *arr[10];
arr[0] = "hello"
arr[1] = "world"
或者,制作一个2D字符数组

char arr[10][100];
strcpy(arr[0], "hello");
strcpy(arr[1], "world");
最好是从输入流中逐字读取,并且

char temp[100];
scanf("%s", temp) 
#包括
#包括
int main()
{
字[20][20];
静态int i,j;
printf(“输入句子:”);
ch=getchar();
而(ch!='\n')
{
如果(ch='')
{
字[i][j]='\0';
i++;
j=0;
}
其他的
字[i][j++]=ch;
ch=getchar();
}

对于(j=0;j)但是,此方法不起作用“此方法做什么?编译?运行?是否有意外结果?”其中wordArray是字符串数组显示该声明。如果
wordArray
是一个
char*
数组,则此方法不起作用,因为每个单词都使用相同的缓冲区。并且您的数组中填充的所有内容都是每个插槽中相同缓冲区的相同地址。认真地说。压制胡乱猜测的垃圾邮件,并提供更多关于您的内容的解释您看到了。编译器错误?运行时错误?意外输出?并显示您的
wordArray
声明。谢谢,但似乎存在分段错误。知道原因吗?您在while()外部初始化了i吗?谢谢,但似乎存在分段错误。知道原因吗?您还没有显示完整的代码,所以我不能确定。但请参阅更新的答案。您还应该使用类似于
的方法(i@codebeard谢谢你的提示,修正了。有问题的代码(Samoth编辑看起来毫无意义)为所有
wordArray
项分配相同值的
word
地址。当指向分配缓冲区的指针在原始循环中丢失时,您的
malloc
循环所完成的唯一一件事是内存泄漏。不,不是。
wordArray
中的每个字都将是相同的字,存储在
word
缓冲区l中ast.您的答案中分配给
malloc
的缓冲区没有任何用途。@hacck您在while循环中使用
wordArray[i]=word;
意味着什么?@ajay:我的意思是这个
strcpy(wordArray[i],word);
。但是
wordArray[i]=word;
在这里不起作用。:)@很明显,这在这里不起作用。这就是我所指的。:)这是完整的代码正确的缩进也会很好,特别是在你想让别人学习的代码上。代码呢..谢谢你告诉我。。
char temp[100];
scanf("%s", temp) 
  #include<stdio.h>
  #include<string.h>

    int main()
   {
       char ch,word[20][20];
       static int i,j;
       printf("Enter the sentence: ");
       ch=getchar();
       while( ch != '\n' )
        {
             if (ch == ' ' )
             {
              word[i][j] = '\0';
             i++;
             j=0;
             }
            else
            word[i][j++] = ch;
            ch = getchar();
         }

       for ( j=0;j<i;j++)
       {
        puts(word[j]);
      }
       return 0;
    }