Я пытаюсь написать функцию, которая сравнивает первые две цифры числа, а так как itoa недоступен, я использую sprintf, как было обнаружено в начале страницы, чтобы сначала преобразовать число в строку и затем сравните каждую цифру. По какой-то странной причине я получаю seg-ошибки, когда я запускаю это. Я пробовал то же самое, но с использованием реальных строк, таких как strncmp («100», «101», 2), и это не дает никаких проблем. Проблема заключается в двух операторах sprintf, которые каким-то образом помещают str2. Я ничего не могу найти, почему это происходит, и что я могу сделать, чтобы исправить это. Провел 2 часа на этом, прежде чем отправлять здесь. Был бы признателен за помощь, если это возможноstrncmp дает ошибку сегментации при сравнении двух строк
int exists;
int id1 = 100;
int id2 = 101;
char str1[12];
char str2[12];
sprintf(str1, "%d", id1);
sprintf(str2, "%d", id2);
exists = strncmp(str1,str2,2);
printf("Res is %d\n", exists);
Edit: Я пытался PRINTF как str1 и str2, и они показывают, 100 и 101 соответственно. Я также пробовал итерацию через массивы символов, но снова получил ошибку. Я действительно смог успешно запустить его, когда создал тестовый файл, и все это началось, поэтому я полностью потерял
Редактировать # 2: Чтобы добавить контекст, эта программа имеет несколько файлов, а некоторые библиотеки включены в другие файлы , Все правильно окружено #ifndef. Вопрос: может ли порядок компиляции файлов произвести эту проблему?
Код, который вы опубликовали, выглядит хорошо и работает правильно для меня. Вы уверены, что это не подходит для вас? Можете ли вы создать [sscce] (http://sscce.org/)? – simonc
Что происходит, когда вы печатаете строки? Можете ли вы использовать отладчик, чтобы определить, какая строка вызывает segfault? –
Я считаю, что входные параметры 'strncmp' должны быть указателями, поэтому вы должны передавать' str1' и 'str2' как' & str1' и '& str2', передавая таким образом его адрес – edwardmp