C - 单词数组

标签 c arrays pointers

我对编程还很陌生,如果这个问题看起来微不足道,我很抱歉。我一直在寻找答案,但我找不到一个直接的答案。我们在类里面讲过这个,但我的大脑现在完全崩溃了。

在 C 中,我需要制作一个数组,以便每个元素对应一个单词。

编辑:我只是记得我应该用指针数组做点什么。所以像这样的事情就是我正在做的......

main()
{
    char *line[MAXLINE];   // This points to the beginning of words in compare[]
    char compare[MAXLINE]; // This is where the words will be read in
    int  counter[MAXLINE]; // Counter for the words that appear more than once
    char c;
    int i = 0;
    int n;

    for (n=0; c!=EOF; n++){
        while ((c=getchar())!=' '||c!='\n'||c!=EOF){
            compare[i]=c;
            i++;
        }
        line[n]=compare;
        i = 0;
    }

我知道这不是全部,因为我需要让 compare 有一个新地址,有人会建议这样做吗?我需要使用结构还是有其他方法?我应该为此使用 malloc 吗?

如果我问了一个愚蠢的问题,我深表歉意。由于这是我在这里发表的第一篇文章,因此非常感谢我提出这个问题的任何意见,因为我已经非常尊重这个社区并且不想用愚蠢的问题来破坏它。哦,对问题本身的投入也很感激:)

谢谢, 斜线之星

最佳答案

像这样的东西应该适用于 (linux) 你需要在最后删除\r 的 Windows

char buf[MAXLINE];
char** wordsz = malloc( MAXNUMBEROFWORDS * sizeof(char*) );
int wordCount = 0;
while (fgets( buf, MAXLINE, stdin )!=NULL && wordCount<MAXNUMBEROFWORDS)
{
   int len = strlen(buf); 
   if ( buf[len-1] == '\n' ) buf[len-1]='\0';
   wordsz[wordCount] = malloc( strlen(buf) + 1 );// assuming sizeof(char)==1 + \0
   strcpy(wordsz[wordCount++], buf);
} 

当您按下 EOF 时,fgets 返回 NULL,如果输入太长的字符串,您将无法覆盖内存,就像 scanf 一样,您只分配您实际需要的空间(来自 MAXNUMBEROFWORDS 的一部分)

关于C - 单词数组,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4331277/

相关文章:

python - 如何格式化 scikit-learn 输出数据?

C# 从类数组中删除项目

python - 如何沿给定轴取元素,由它们的索引给出?

python - 指向 c_int 的 ctypes 指针与 c_int 数组

c - 互斥量动态分配

c++ 库可以在 c 中运行吗?

c - 如何修复错误: incompatible types when returning type 'struct {aka struct <anonymous>}

c++ - 指针的问题

c++ - 从父类向下转换元素

c - 我们如何在C语言中将list(Python中的)函数实现为数组?