Когда я передаю массив в функцию в динамической библиотеке с подписью:
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 в верхней части функции.
Почему происходит сбой?
UPDATE
Обратите внимание, что он работает локально.
#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;
}