Прежде всего
Вы определяете string
, чтобы указывать на постоянный строковый литерал, который хранится в постоянной памяти:
char * string = "Simulated Annealing = 12847369";
Затем вы найдете первое вхождение =
в этой строке и поместите указатель на нее в value
:
char * value = strchr(string, '=');
Итак, value
теперь указывает на постоянную память или value = NULL
, так что это строка с неопределенным поведением:
*(value ++ ) = 0; // assign value to read-only memory
если скажем, вы написали
char string[] = "Simulated Annealing = 12847369";
Вы хранили эту строку в массиве в стеке, и тогда вы могли бы записать в нее.
Теперь к вашему вопросу
Ваш код не будет печатать его на новой строке, если вы что-то написали до этого, вы увидите, что:
char string[] = "Simulated Annealing = 12847369";
char * value = strchr(string, '=');
*(value ++ ) = 0;
printf("First line");
printf("%s ==== %s", value, string);
Чтобы найти первое вхождение символа пробел , используйте strchar(karmarkar, ' '):
.
И еще раз, когда вы используете strchr
, проверьте, является ли возвращаемое значение NULL
, поскольку оно может быть, и если оно действительно NULL, то ваша программа, вероятно, завершится сбоем. (разыменование незаконного адреса)