我想逐个字符地阅读文本文件,然后用字符和带有单词的东西做一些事情。这是我的实施:
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);
但是,当我尝试运行此程序时,我的程序会立即崩溃。将字词设置为""?是否有问题?如果是这样,我该怎么办呢?
答案 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)
word
指向strcat
不允许写入的常量区域,因此您的代码被转储; word
应该有足够的空间来保留字符,尝试使用硬编码或realloc(word, size_t)
;
可以使用gcc -o
:
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;
}