我创建了这个函数来读一个单词。我有分段错误,我找不到问题。这就是我所做的。
void LeeCaracter(FILE * fp, char * s)
{
char c;
int i = 0;
c = fgetc(fp);
while(c==' ' || c=='\t' || c=='\n')
c = fgetc(fp);
while(c!=' ' && c!='\n')
{
s[i] = c;
i++;
c = fgetc(fp);
}
s[i] = '\0';
}
是一个指针参数,因为我以后必须使用它。用一个*写它是否正确?谢谢你的帮助!
*如果我想知道单词后面的字符(''或'\ n')怎么办?我在while循环后添加了这个: 的 “printf(” %C “C);” 但它不会打印任何东西。有什么想法吗?
答案 0 :(得分:2)
考虑:
while(c==' ' || c=='\t' || c=='\n')
c = fgetc(fp);
所以,在这一点上,c不是' '
和'\n'
的两件事。然后:
while(c!=' ' && c!='\n')
{
s[i] = c;
i++;
}
由于c的值在循环中没有变化,while条件总是为真。意思是很快,s[i]
将超出范围。您需要检查s的长度,可能是通过将其作为参数传入(更不用说,重新考虑您的算法 - 可能您想在循环内更多地进行fgetc)。
答案 1 :(得分:0)
您必须确保's'有足够的空间容纳输入文件中包含最大字符的单词。然后,您需要确保检查“文件结束”。这是一个工作版本。我希望它也适合你。
#include <stdio.h>
void LeeCaracter(FILE * fp, char * s)
{
char c;
int i = 0;
c = fgetc(fp);
if (feof(fp)) return;
while (c == ' ' || c == '\t' || c == '\n')
c = fgetc(fp);
while (!feof(fp) && (c != ' ' && c != '\n')) {
s[i++] = c;
c = fgetc(fp);
}
s[i] = '\0';
printf("%s\n", s);
}
int main(void)
{
char s[128]; /* assuming no word is larger than this size */
FILE *fp = fopen("/usr/share/dict/words", "r");
while (!feof(fp)) {
LeeCaracter(fp, s);
}
return 0;
}