gpt4 book ai didi

c - C 中的数组访问错误

转载 作者:太空宇宙 更新时间:2023-11-04 06:27:19 25 4
gpt4 key购买 nike

我的代码中不断出现 valgrind 错误,我不知道如何修复它。 :/这个想法是,无论输入中 2 个或更多单词/字母之间有多少制表符/空格,在输出中它都应该只有一个空格。例如:

a    b   c d -> a b c d

代码:

char* echo(char* in) {
char buffer[256];
int incounter=0, buffcounter=0;

while(incounter<(strlen(in))) {
if(in[incounter] == ' ' || in[incounter] == '\t') incounter++;
else if(in[incounter] != ' ' && in[incounter] != '\t') {
while(in[incounter] != ' ' && in[incounter] != '\t') {
buffer[buffcounter] = in[incounter]; //53
incounter++;
buffcounter++;
}
buffer[buffcounter] = ' ';
buffcounter++;
}
}
char* out = buffer;
return out;
}

错误:

==20521== Conditional jump or move depends on uninitialised value(s)
==20521== at 0x4010B4: echo (hhush.c:53)
==20521== by 0x4021CA: readCommand (hhush.c:327)
==20521== by 0x402538: main (hhush.c:371)
==20521== Uninitialised value was created by a stack allocation
==20521== at 0x402017: readCommand (hhush.c:301)
==20521==
==20521== Conditional jump or move depends on uninitialised value(s)
==20521== at 0x4010CE: echo (hhush.c:53)
==20521== by 0x4021CA: readCommand (hhush.c:327)
==20521== by 0x402538: main (hhush.c:371)
==20521== Uninitialised value was created by a stack allocation
==20521== at 0x402017: readCommand (hhush.c:301)

我现在就是这样,还是一样的错误

char* echo(char* in,char* buffer){
size_t inlen=strlen(in);
int incounter=0,buffcounter=0;
while(incounter<inlen){
if(in[incounter]==' '||in[incounter]=='\t')incounter++;
else{
while(in[incounter]!=' '&&in[incounter]!='\t'){
buffer[buffcounter]=in[incounter];
incounter++;
buffcounter++;
}
buffer[buffcounter]=' ';
buffcounter++;
}
}
return buffer;
}

我称它为:

char input[256];
fgets(input,sizeof(input),stdin);
...
char buffer[256];
printf("%s\n",echo(input,buffer));

最佳答案

 char* out=buffer;
return out;
}

不要返回指向具有自动存储持续时间的数组的指针(此处为 buffer 数组)。如果访问指针值,它会调用未定义的行为,因为当退出声明它们的 block 时自动对象被丢弃(这里是 echo 函数返回时)。

关于c - C 中的数组访问错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25193869/

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