Переместить два символа из строки в другую строку не так - PullRequest
0 голосов
/ 16 февраля 2019

У меня есть простая программа на c, которую я хочу сделать, это взять первые два числа из строки, поместить их в другую строку, которая будет только этими двумя числами, а затем преобразовать ее в int.

стр. HLength равно 54 ...

char string[100] = ":50010000214601360121470136007EFE09D21901\n";
char hLength[3];
int length,c;

hLength[0] = string[1];
hLength[1] = string[2];

printf("%s", hLength);

system("pause");
return 0;

Вывод теперь "50: 50010000214601360121470136007EFE09D21901"
Но я хочу только "50"
И не знаю, где проблема.

Ответы [ 2 ]

0 голосов
/ 16 февраля 2019

hLength[2] все еще не инициализирован.Если он не заполнен нулевым терминатором, передача его любой функции, ожидающей строковый параметр, является неопределенным поведением.

Хотя вы можете вручную заполнить hLength[2] нулями, как вы это делали с позициями 0 и 1, более идиотский способ сделать это - использовать библиотечную функцию snprintf с ограничением в 2 символа в исходной строке:

snprintf(hLength, 3, "%*s", 2,  string);

Или даже при объявлении hLength:

char hLength[3] = { string[0], string[1] }; // hLength[2] is initialized with a '\0' now

Обратите внимание, что неявное заполнение остатка массива нулями допустимо только в том случае, если при объявлении массив частично инициализируется с помощью фигурных скобок, как в { val1, val2 ... }.Назначение отдельных элементов массива после объявления не сделает этого за вас.

0 голосов
/ 16 февраля 2019

вы пропустили, чтобы положить нулевой символ в конец hLength , добавьте

hLength[2] = 0;

у вас есть вывод, потому что в вашем случае строка после hLength , но это случайный эффект, конечно

...