用fgetc读取单词?

时间:2014-10-21 00:57:03

标签: c c-strings fgetc

我想逐个字符地阅读文本文件,然后用字符和带有单词的东西做一些事情。这是我的实施:

char c;
char* word="";
fp = fopen("text.txt","rt");
do
{
    c = (char)fgetc(fp);
    if(c == ' ' || c == '\n' || c == '\0' || c == '\t')
    {
        //wordfunction(word)
        word = ""; //Reset word
    }
    else
    {
        strcat(word, &c); //Keeps track of current word
    }
    //characterfunction(c);
}while(c != EOF);

fclose(fp);

但是,当我尝试运行此程序时,我的程序会立即崩溃。将字词设置为""?是否有问题?如果是这样,我该怎么办呢?

2 个答案:

答案 0 :(得分:1)

在你的单词变量初始赋值中,你指向一个长度为0的静态字符串。当你尝试将数据写入那里时,你将覆盖其他东西而你的程序会刹车。相反,你需要为你的话保留空间。

你有

的地方
char* word="";

改为使用

char word[100];

这将为你的单词创建一个100个字符的空间。

char c;
char word[100];
fp = fopen("text.txt","rt");
int index = 0;
do {
  c = (char)fgetc(fp);
  if(c == ' ' || c == '\n' || c == '\0' || c == '\t') {
    //wordfunction(word)
    word[0] = 0; //Reset word
    index = 0;
  } else {
    word[index++] = c;
    word[index] = 0;
    //strcat(word, &c); //Keeps track of current word
  }
  //characterfunction(c);
} while(c != EOF);

fclose(fp);

答案 1 :(得分:0)

  1. word指向strcat不允许写入的常量区域,因此您的代码被转储;
  2. word应该有足够的空间来保留字符,尝试使用硬编码或realloc(word, size_t);

  3. 可以使用gcc -o

  4. 进行编译

    int main(){ char c; char word[1000] = {0}; //enough space FILE* fp = fopen("text.txt","rt"); int index = 0; assert(0 != fp); do { c = (char)fgetc(fp); if(c == ' ' || c == '\n' || c == '\0' || c == '\t') { //wordfunction(word) index = 0; } else { word[index++] = c; } //characterfunction(c); }while(c != EOF); word[index] = 0; fclose(fp); return 0; }