gpt4 book ai didi

c - C 程序中的段错误(核心转储)

转载 作者:行者123 更新时间:2023-11-30 15:23:50 25 4
gpt4 key购买 nike

我有以下程序:

#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#define MAX 255

char * decrypt(char *p, int key){
char *tmp;
for(int i = 0; p[i] != '\0'; i++){
tmp[i] = p[i]-key;
}
return tmp;
}

int main(void){
printf("Hallo Welt!");
printf("%s\n", decrypt("ibmmp", 1));
return EXIT_SUCCESS;
}

当我使用 gcc -Wall 编译它时,我收到警告 tmp 可能在此函数中未初始化 [-Wmaybe-uninitialized] tmp[i] = p[i]-key(翻译自德语)和段错误(核心转储)./crypto 当我运行时

是什么导致了这个错误?

我知道这个问题已被问过很多次,但我无法修复此警告,因为其他人有不同的源代码,我无法使其适应我的问题。

最佳答案

您需要分配“tmp”,然后保持良好的“c”编码,检查分配是否成功。我假设您已经定义了 MAX,因此您可以设置字符串长度的上限,因此我在下面使用它。如果 MAX 是不带 null 的字符数,那么您需要“malloc(MAX +1)”。如果打算包含 NULL,则只需保留下面定义的代码即可。您还需要决定在 malloc 失败时返回什么。我返回 NULL,但您可能想要根据您的需要做一些不同的事情。

另请注意,此函数正在返回分配的内存,因此需要有人释放它,这样您就不会泄漏内存。

char * decrypt(char *p, int key){
char *tmp;
tmp = (char *) malloc(MAX);
if(!tmp)
return NULL;
for(int i = 0; p[i] != '\0'; i++){
tmp[i] = p[i]-key;
}
return tmp;
}

关于c - C 程序中的段错误(核心转储),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28639429/

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