“为什么出现?”@&引用;在C中复制字符时添加
我正在用C语言创建一个程序,它接收一个文件并反转每一行,如下所示:“为什么出现?”@&引用;在C中复制字符时添加,c,string,char,C,String,Char,我正在用C语言创建一个程序,它接收一个文件并反转每一行,如下所示: $ cat file Line 1 Line 2! Line_3 $ ./reverse < file 1 eniL !2 eniL 3_eniL $cat文件 第1行 第二行! 第3行 $/反向
$ cat file
Line 1
Line 2!
Line_3
$ ./reverse < file
1 eniL
!2 eniL
3_eniL
$cat文件
第1行
第二行!
第3行
$/反向<文件
1埃尼尔
!2埃尼尔
3_eniL
但是我犯了一个错误,我不知道为什么
在程序中,我做了一个循环:
#include <stdio.h>
#include <string.h>
#include <sysexits.h>
#include <stdbool.h>
int main(int argc, char *argv[]){
char string[2048];
bool final = false;
while(!final){
fgets(string,2048,stdin); // Read line
if(feof(stdin))
final=true;
else{
int length;
length = (string[strlen(string)-1] == '\n') ? strlen(string)-1 : strlen(string);
char reverseStr[length];
// Loop
int count = length;
for(int i=0;i<length;i++){
reverseStr[i]=string[count-1];
count--;
}
printf("%s\n",reverseStr);
}
}
}
#包括
#包括
#包括
#包括
int main(int argc,char*argv[]){
字符字符串[2048];
bool-final=false;
而(!最终){
fgets(string,2048,stdin);//读取行
if(feof(stdin))
最终=正确;
否则{
整数长度;
长度=(字符串[strlen(字符串)-1]=='\n')?strlen(字符串)-1:strlen(字符串);
char reverseStr[长度];
//环路
int计数=长度;
对于(int i=0;i),发生这种情况是因为代码没有注意确保在终止处有NUL字符。@恰好出现在结尾处的(未初始化)缓冲区中,然后可能是一个随机NUL
要解决此问题,请执行以下操作:
for(int i=0;i<length;i++){
reverseStr[i]=string[count-1];
count--;
}
reverseStr[length] = '\000'; // I added this.
for(int i=0;i将长度存储为单独的计数,而不是NUL终止符。因此,请使用格式字符串中的长度
printf("%*s\n", length, reverseStr);
GDB映像:
for(int i=0;i<length;i++){
reverseStr[i]=string[count-1];
count--;
}
reverseStr[length] = '\000'; // I added this.
printf("%*s\n", length, reverseStr);