这里的总C菜鸟。我知道我的sprintf_wrapper
方法有问题,因为在我介绍它之前一切正常。该函数的要点是获取字符串缓冲区和数字,并将字符串缓冲区值更改为“WHALE = [num]”。然后我使用putenv
方法使用这个新字符串。
代码导致“分段错误(核心转储)”,我相信它是在调用sprintf_wrapper之后发生的。
int main(void) {
getP0Info();
putenv("WHALE=7");
forkProcesses();
int whale = atoi(getenv("WHALE"));
char new_env[50];
sleep(1);
printf("P0: %d\n", whale);
whale = whale - 1;
sprintf_wrapper(new_env, whale);
putenv(new_env);
return 0;
}
void sprintf_wrapper(char* str, int num) {
char buffer[10];
str = "WHALE=";
sprintf(buffer,"%d", num);
strcat(str,buffer);
}
答案 0 :(得分:2)
您正在为str
变量分配字符串常量,然后尝试附加到该变量。因为字符串常量通常存在于只读内存中,所以这通常会导致核心转储。
请改为:
void sprintf_wrapper(char* str, int num) {
sprintf(str,"WHALE=%d", num);
}
答案 1 :(得分:0)
sprintf_wrapper(new_env, whale);
您要附加到字符串文字,这是只读内存。
这会产生分段错误,因为您写入了不应写入的内存。
str = "WHALE=";
这是一个只读字符串文字。