Я написал программу, которая анализирует строку в соответствии с этим форматом:strtok() отличаются по составителям
somethingsomething:number:
На моем компьютере эта программа работает безупречно. Однако, как только я загрузил код и скомпилировал его на компьютер школы, strtok()
имеет другое поведение.
Например, с этой строкой: p2test/f4.txt:1:
, на моем компьютере первый токен будет p2test/f4.txt
. Однако на компьютере школы токен заканчивается p2test/f4.t
.
Вот фрагмент кода:
char *token;
char delim[1] = ":";
if ((token = strtok(tmp_string, delim)) != NULL) {
...
}
Здесь tmp_string
бы p2test/f4.txt:1:
.
Вот версия компилятора моего компьютера: GCC версии 4.9.1 (Ubuntu 4.9.1-16ubuntu6)
Вот версия компилятора моей школы: GCC версии [редакция НКУ-4_8-филиал 202388] 4.8.1 20130909 (SUSE Linux)
Неопределенное поведение отличается accross компьютеры, пожалуйста, разместите остальную часть кода, точно как генерируется 'tmp_string'. –
'char delim [1] =": ";' Это скомпилировано? В этом строковом литерале есть два символа, но вы объявили массив из 1 символа. Другой символ - это нулевой ограничитель. – PaulMcKenzie
@PaulMcKenzie О, вы правы! Это странно, потому что я включил все предупреждения и педанты тоже. – mrQWERTY