gpt4 book ai didi

c - 不理解为什么会出现段错误

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

当我将数组传递给具有签名的动态库中的函数时:

void itoa(int n, char s[]);

并从我的主函数中调用它:

int main(int argc, char *argv[])
{
if (argc > 1) {
char *arg = argv[1];
printf("%s\n", arg);
}

char str[15]={'0', '0', '0', '0', '0',
'0', '0', '0', '0', '0',
'0', '0', '0', '0', '\0'};
itoa(INT_MIN, str);
printf("%s\n", str);
return 1;
}

使用 gdb 遍历代码,我可以看到程序在以下行崩溃:

s[i++] = n % 10 + '0';

请注意,i 的初始值在函数顶部声明为 0。

为什么会崩溃?


更新

注意它在本地工作。

#include <stdio.h>
#include <limits.h>
#include "c_lib.h"

void itoa_local(int n, char s[])
{
int min_int = 0;
int i, sign = 0;;

if (INT_MIN == n) {
min_int = 10;
n++;
}

if ((sign = n) < 0) n = -n;
do {
s[i++] = n % 10 + '0';
} while ((n /= 10) > 0);

if (sign < 0) s[i++] = '-';
s[i] = '\0';
if (min_int == 10) s[0]++;
reverse(s);
}


int main(int argc, char *argv[])
{
if (argc > 1) {
char *arg = argv[1];
printf("%s\n", arg);
}

char str[15]={'0', '0', '0', '0', '0',
'0', '0', '0', '0', '0',
'0', '0', '0', '0', '\0'};
itoa_local(INT_MIN, str);
printf("%s\n", str);
return 1;
}

最佳答案

答案在最初的帖子中。我回答了我自己的问题,所以我不必删除它。主要是存档原因。

关于c - 不理解为什么会出现段错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8219165/

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