gpt4 book ai didi

c - 循环内的 fgets C

转载 作者:行者123 更新时间:2023-11-30 18:05:56 24 4
gpt4 key购买 nike

  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/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com