C程序在逐行读取文本文件时添加空格

C程序在逐行读取文本文件时添加空格,c,file,text,line,newline,C,File,Text,Line,Newline,我有一个程序,可以打开一个文本文件并逐行读取。它还将每一行放入一个数组中。当我使用此函数并尝试使用printf语句中的每一行时,会添加新行字符 我的代码: char fileContents[MAX_LINES][MAX_LINE_LENGTH]; int lineCount = 0; FILE *ifp = fopen("Tree-B.txt", "r"); if (ifp == NULL) { printf("Error openin

我有一个程序,可以打开一个文本文件并逐行读取。它还将每一行放入一个数组中。当我使用此函数并尝试使用printf语句中的每一行时,会添加新行字符

我的代码:

    char fileContents[MAX_LINES][MAX_LINE_LENGTH];
    int lineCount = 0;

    FILE *ifp = fopen("Tree-B.txt", "r");
    if (ifp == NULL)
    {
        printf("Error opening file!\n");
        exit(1);
    }

    while (fgets(fileContents[lineCount++], MAX_LINE_LENGTH, ifp) != NULL);
    fclose(ifp);

    printf("Name: %s is now %s", fileContents[0], fileContents[1]);
其结果如下:

Name: Tree Bacon
 is now 30.21
printf正在添加新行字符,我似乎无法发现为什么会发生这种情况

从我的文本文件中读取的两行是:

Tree Bacon
30.21

由于
fgets
还存储尾随换行符,因此可以使用
strchr
将其删除:

char *ptr;

while (fgets(fileContents[lineCount], MAX_LINE_LENGTH, ifp) != NULL) {
    ptr = strchr(fileContents[lineCount], '\n');
    if (ptr != NULL) {
        *ptr = '\0';
    }
    linecount++;
}

我最喜欢用
strcspn

while (fgets(fileContents[lineCount], MAX_LINE_LENGTH, ifp) != NULL) {
    fileContents[lineCount] [ strcspn(fileContents[lineCount], "\r\n") ] = 0;
    linecount++;
}

当然,您必须推迟增加数组索引。

printf
没有添加任何内容。换行符位于原始文件中。
fgets
保留输入中的
换行符
printf
不添加任何内容,换行符位于数据中
fgets()
在中读取行时包含换行符。