Несколько быстрых наблюдений:
char * some_func(char * code) {
char char_array[4];
strcpy(char_array, "000");
code = char_array;
return code;
}
Вы не можете назначать строки, используя =
в C. Это портит все - вы назначаете code указатель вашего локально выделенного char_array
для кода, но вы не копируете содержимое памяти.Также обратите внимание, что поскольку char_array
размещено в стеке (обычно), вы обнаружите, что оно исчезает, когда вы возвращаетесь из этой функции.Вы могли бы обойти это с помощью ключевого слова static
, но я не думаю, что это самое хорошее решение здесь.Вы должны использовать что-то вроде ( большое предупреждение, этот пример не очень безопасен, вам нужно проверить длины строк, но для краткости ):
void some_func(char * code) {
strcpy(code, "000");
return;
}
(Обратитесь к this (и this ) для получения рекомендаций по безопасной обработке строки).
И позвоните по номеру some_func(jmp_code)
в main.Если вы не уверены, что это делает, прочтите указатели .
Вторая проблема.
char * jmp_code = NULL;
В настоящее время вы объявили достаточно места для указателя на тип символа.Если вы хотите использовать мое предложение выше, вам нужно либо использовать malloc()
и free()
, либо объявить char jmp_code[4]
вместо этого, чтобы было выделено место.
Что я думаю, что происходит?Ну, в моей системе я получаю:
и код '0,0,0 ,,' и код ''
Но ядумаю, что есть вероятность, что jmp_code
указывает на нули в стеке, предоставляемые вашей some_func
функцией.Я думаю, что в вашей системе данные были перезаписаны.
Вместо этого вы читаете информацию, которую ваш терминал интерпретирует как указанный символ.Прочитайте кодировку символов.Я особенно рекомендую начинать с Абсолютный минимум для каждого разработчика программного обеспечения. Абсолютно, положительно необходимо знать о Unicode и наборах символов (никаких оправданий!)