gpt4 book ai didi

c - 解码器函数在 C 中返回垃圾字符串。如何修复?

转载 作者:太空宇宙 更新时间:2023-11-04 07:11:35 26 4
gpt4 key购买 nike

下面是我做的一个简化的解码函数,它应该接受一个特定大小的字符串,并返回每个字符的 ascii 值比原始字符串中相同位置的原始字符小一个的字符串。

例如,如果我使用参数“BCDEF”和 5 调用函数,那么我应该能够返回“ABCDE”,但是,我得到的大部分都是垃圾。

char* dec(char* s,int sz){
int x=0;
unsigned char p=0;
char ss[sz];
if (s){
for (x=0;x<sz;x++){
p=s[x];
p=p-1;
ss[x]=p;
}
return ss;
}
else{return s;}

下面是我从外部调用它的方式:

char *item="BCDEF",*item2="     ";
item2=dec(item,5);
printf("item= %s",item2);

即使我尝试保留固定大小,将 item2 的结果打印为字符串也会产生垃圾。

编译代码还会产生“警告:函数 dec 返回局部变量的地址”,但我没有在返回变量前加上 &。

我该如何解决这个问题?

最佳答案

ssdec 函数中的一个局部(数组)变量。当函数结束时,数组不复存在,当您稍后访问该指针/地址时,它的 Undefined behavior .

malloc 不是将本地数组放在堆栈上,而是:

char *ss = malloc(sizeof(char)*(sz+1)); //+1 for NUL char 
//do something
return ss;

并在不需要时使用free清除内存。

关于c - 解码器函数在 C 中返回垃圾字符串。如何修复?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28017621/

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