Я не совсем уверен, что вы спрашиваете, но если это как получить строковое представление целого числа со смещением 6, вы можете сделать это в два этапа:
char str[enough_to_hold_datalen_and_then_some];
int val = atoi (input+6);
sprintf (str, "%d", val);
В качестве альтернативы, если вы хотите получить фрагмент строки независимо от того, состоит ли он из цифр:
strcpy (str, input+6); // get the rest of the string
strncpy (str, input+6, 4); str[4] = '\0'; // get up to four characters.
Если ваша проблема в том, что вход является локальной переменной для функции и, когда вы возвращаете ее адрес, вы получаете фиктивные данные, потому что они вышли из области видимости, я бы использовал:
return strdup (input+6);
Это вернет копию строки в куче (которая является долгоживущей, а не стековым фреймом, которого нет).
Просто помните, что вам нужно free
эту память, когда вы закончите с ней. И будьте уверены, что у вас на самом деле есть шесть символов в этом буфере.
Если ваша реализация C не имеет strdup
, используйте этот .
Судя по твоему обновлению, похоже, что ты выбрал последний вариант. С вашим кодом:
char *r_str;
strcpy (r_str, input+6);
return r_str;
вы на самом деле не выделяете хранилище для размещения копии строки (следовательно, происходит сбой). Я бы заменил весь этот бит на простой:
return strdup (input+6);
как я и предлагал.
Ха, ха, должен любить этих писателей страниц Linux :
Если строка назначения функции strcpy () недостаточно велика (то есть, если программист был глуп или ленив и не смог проверить размер перед копированием), тогда может произойти что угодно. Переполнение строк фиксированной длины является любимой техникой взломщика.