char in[20];
char out[20];
for(int i=0; i < nEdges ;i++){
char str[50];
fgets(str, 50, stdin);
char *result = NULL;
result = strtok(str, " ");
int count = 0;
int i = 0;
char name[2][20];
while(result != NULL){
strncpy(name[i],result,20);
result = strtok( NULL, " ");
count++;
i++;
}
if(count > 2){
errorMsg2();
}else{
i = strlen(name[1]);
for(int x=0; x < i ;x++){
if(name[1][x] == '\n')
name[1][x] = '\0';
strncpy(out,name[0],20);
strncpy(in,name[1],20);
}
嗨,我正在尝试读取一行并验证只有两个元素,否则会出现错误消息。这一切都在 for 循环内,当我执行程序时,fgets 从未要求我输入。 fgets 在循环内工作吗?
最佳答案
是否在循环内使用 fgets
并不重要。可能存在不同的问题。使用调试器单步调试将是最好的选择。
一个潜在的问题是将 strncpy
执行到 name
的循环。如果缓冲区中有两个以上的项目,那么它将写入 name
数组的范围之外。在覆盖之前(而不是之后)添加检查以避免这种可能性可能会很好。
另一个可能的问题是变量i
的使用。您可能会遇到一些范围界定问题。该变量在主循环中使用,然后通过调用 strlen
在该循环内进行更新。这可能会导致主循环提前结束(取决于 nEdges
的值和 name[1]
的长度。在任何一种情况下,它都可能不是所需的结果。
关于c - 循环内的 fgets C,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5980039/