gpt4 book ai didi

c++ - 字符串和字符不兼容

转载 作者:行者123 更新时间:2023-11-28 00:45:06 24 4
gpt4 key购买 nike

令我惊讶的是,在 C++ 中没有用于转换字符串和字符的内置方法。这是我的问题:我想更新文本文件中的一行:

#include <stdlib.h>
#include <fstream>
#include <windows.h>
#include <iostream>
#include <stdio.h>

using namespace std;

int main(void) {

char l1 [12];
char l2 [15];
char l3 [15];
char l4 [15];
char md [16];

FILE * myfile2 = fopen("state.txt", "r+");
fgets(l1,12,myfile2);
fgets(l2,12,myfile2);
fgets(l3,12,myfile2);
fgets(l4,12,myfile2);
fseek ( myfile2 , 0 , SEEK_SET );

strcpy(md , "detectoroff");
fputs (md,myfile2);

strcpy(md,l2);
fputs (md,myfile2);
strcpy(md,l3);
fputs (md,myfile2);
strcpy(md,l4);
fputs (md,myfile2);
Sleep(1000);
fclose(myfile2);
return EXIT_SUCCESS;
}

Inicially 文本文件有

    a
b
c
d

运行代码时的输出是

detectoroffb
c
d

如果我替换这条线

  strcpy(md , "detectoroff");

由此

  strcpy(md , "detectoroff\n");

现在结果没问题,但是如果我运行两次,第一次运行下面会出现一个空行,如果运行三次,就会出现另一个空行等等。我该如何解决这个问题?

最佳答案

l1 的声明更改为:

char l1 [13];

detectoroff 是 11 个字符。您需要另一个字符作为换行符,另一个字符作为表示字符串结尾的空字节,总共 13 个。因为您只用 12 个字符声明了 l1,所以 fgets() 写在数组边界之外。这会导致未定义的行为。

使用 std::string 和 C++ 流方法,你不会遇到这样的问题。

关于c++ - 字符串和字符不兼容,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16576890/

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