c - 使用fgetc读取单词?

标签 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);

但是,当我尝试运行此程序时,我的程序立即崩溃。将word设置为“”有问题吗?如果是这样,我该怎么办?

最佳答案

在你的word变量初始赋值中,你指向一个长度为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);

关于c - 使用fgetc读取单词?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26477345/

相关文章:

c - C 字符串数组和指针传递方法不起作用

c - 如何修复代码中的错误以加密文本文件?

C Lang - 如何检测文件是否已用作输入参数?

c - LeaveCriticalSection() 是否将缓存的变量刷新到内存中?

c - 如何从标准输入打印行?

c - 如何使用 getch() 在数组中添加一个 2 位数字作为单个条目?

sockets - 如何通过套接字发送CString?

c - strtol、strtod 不安全吗?

c - 让我发疯的 Pthread 数据竞赛