c - 在 C 中从文件中填充字符串时获取垃圾

标签 c

我应该从一个文本文件中填充一个结构数组。这是结构的定义:

typedef struct{
char name[20];
int age;
}person;

此结构应该对用户数据(年龄和姓名)进行分组,我应该从以下格式的文件中获取这些数据: 用户一 35## 标题 ## 用户二 36## 标题 ## 用户三 8## 标题 ## 这是我提出的部分代码(填充函数,稍后由 main 调用):

void fill_array_elements(person* l_p,int N){

int i,j,index,length;
char temp,First_Name[10],Last_Name[10];
FILE*infp;
infp=fopen("PeopleInfo.txt","r");
if(infp==NULL)
   printf("Could not open file.\n");
else
{
for(i=0;i<N;i++)
 {
    fscanf(infp,"%s",First_Name);
    fscanf(infp,"%s",Last_Name);
    temp=getc(infp);
    fscanf(infp,"%d",&l_p[i].age);
    strcpy(l_p[i].name,First_Name);
    l_p[i].name[strlen(l_p[i].name)]=' ';
    strcat(l_p[i].name,Last_Name);
        }
    }
     fclose(infp);
    }

当我尝试显示我的数组时,我总是在以下格式的第一个字符串中得到垃圾:User %:n5jnfOne。其他字符串正常打印。这是一个简单的信心还是我的代码全错了? (我尝试了几行,总是得到相同的输出) 谢谢!

最佳答案

这一行:

l_p[i].name[strlen(l_p[i].name)]=' ';

用空格替换\0 终止符。它不添加新的终止符,因此没有终止符,字符串之后发生的任何事情都被认为是字符串的一部分。

最简单的解决方案是像往常一样使用 strcat,即使您只附加一个字符:

strcat(l_p[i].name, " ");

关于c - 在 C 中从文件中填充字符串时获取垃圾,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28617565/

相关文章:

c - C 中的 switch 语句

c - 如何将循环中获得的 char 值追加到 String 中,以将其传递给 ShellExecute()?

c++ - 定义数组 C/C++

c++ - 如何定义全局函数指针并分配给特定地址

mysql - 为什么我们不使用完整的 32 位来存储自纪元以来的 136 年呢?

c++ - 不明确的 if 和 else 分支 : Is the behaviour defined?

c - 无法使用 putchar(ch) 显示预期结果

c - 在多线程中将多个小片段写入 c 中的临时文件的正确方法是什么?

c - C 结构中未声明的函数

c - 从用户空间访问内核内存(task_struct)