c - 使用 strcat 的错误字符串连接

标签 c arrays string file-io fgets

我正在编写一个程序,从文件中读取字符串,将它们保存到“字符串缓冲区”,然后连接这些字符串并将它们写入另一个文件。

#define _CRT_SECURE_NO_WARNINGS
#include <cstdlib>
#include <iostream>
#include <string.h>
#include <stdio.h>

int main() {
    FILE *f = fopen("Read.txt", "r");
    char line[20];
    char buff[15][20];
    int i = 0;
    while (fgets(line, 18, f)) {
        strcpy(buff[i], line);
        i++;
    }
    FILE *h = fopen("Out.txt", "w+");
    for (int j = 0; j < i; ++j) {
        char ct[4] = "smt";
        strcat(buff[j], ct);
        fputs(buff[j], h);
    }
    return 0;
}

Read.txt 文件内容:

Lorem ipsum 
dolor sit 
amet

预期输出(File Out.txt):

Lorem ipsumsmt 
dolor sitsmt 
ametsmt

但我在 Out.txt 中得到的是:

Lorem ipsum 
smtdolor sit 
smtamet
smt

那么如何得到预期的结果呢?

附言我认为问题发生在我使用函数 fgets() 时。

最佳答案

这不是错误或问题,而是预期的行为。请继续阅读。

fgets()读取并存储结尾的换行符 (\n)。您需要在存储输入之前删除(剥离)它。

也就是说,请注意:

  1. 当您定义了一个固定大小的缓冲区时,请不要允许 i 无限递增。可能溢出。

  2. 确保您的 buff[i] 足够大以容纳连接的字符串。否则,它将调用 undefined behaviour .

关于c - 使用 strcat 的错误字符串连接,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30667908/

相关文章:

c - 显示日期早 90 天形成当前 (ANSI C)

const 指针固定到可变变量

c - 实现一个简单的shell

java - 最终改变的属性

javascript - 将包含特定格式日期的字符串解析为 Javascript 中的 Date 对象

c - 我的 makefile 有什么问题,最后一行永远不会执行?

javascript - 如何从多个不同长度的数组创建一个设定长度的新数组,根据重要性从每个较小的数组中取出的项目数

arrays - 无法将变体数组分配给类型化数组

java - 当方法是静态时如何将计算值添加到字符串

javascript - 查找数组中重复的字母 (javascript)