У меня есть небольшой фрагмент кода, в котором выводятся слова, разделенные новой строкой, и выводятся из строя (слово, 1) в качестве вывода. Вот код:Отладка моего токенизатора строки с помощью gdb
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
int main(int argc, char *argv[]) {
char *str1, *str2, *token;
char *saveptr1;
char buffer[100];
while (fgets(buffer, sizeof(buffer), stdin) != NULL) {
token = strtok_r(buffer, '\n', &saveptr1);
printf("(%s,1)\n", token);
}
exit(EXIT_SUCCESS);
}
Этот код работает правильно и обеспечивает ожидаемый выход. Однако, когда я перехожу через код с помощью gdb, в строке 9 появляется следующая ошибка: строка strtok_r
.
Программный сигнал SIGSEGV, ошибка сегментации. strtok_r() at ../sysdeps/x86_64/strtok.S:101 101 ../sysdeps/x86_64/strtok.S: Нет такого файла или каталога.
Это недоумение. Я даже не «вступаю» в линию strtok_r
, я просто «рядом», то есть перешагиваю. Почему он бросает эту ошибку во время GDB? Я беспокоюсь, потому что у меня есть реальная, большая программа, которую я не могу отлаживать из-за этой проблемы. Фактически, для большинства всех строковых функций (strncmp
, strncpy
) эта проблема возникает.
Редактировать: компилятор предупреждал о назначении, создавая указатель из целого числа без трансляции в этой строке, я должен был бы поставить 2 и 2 вместе.
'' \ n'' -> '' \ n "' – BLUEPIXY
Это похоже на это .. Это очень удивительно ... Я, хотя escape-последовательность \ n все еще считается только символом ... – nirvanaswap
включите предупреждения -Wall. Это спасет вас. –