Не используйте strncpy
, он не делает то, что вы думаете: https://randomascii.wordpress.com/2013/04/03/stop-using-strncpy-already/
В вашем случае, если предположить, что var_name
достаточно большой, по крайней мере, count + 1
байт, простой вызовв memcpy(var_name, declaration + 7, count)
было бы лучше.
Вы, вероятно, допустили еще одну ошибку в своем коде (которую вы не публиковали): вы не можете вернуть адрес локального массива, доступ к его содержимому после возврата имеет неопределенное поведение.
Вот простая функция, которую вы можете использовать для выделения и копирования части строки:
#include <stdlib.h>
#include <string.h>
char *substr(const char *s, size_t pos, size_t len) {
char *p = malloc(len + 1);
if (p) {
memcpy(p, s + pos, len);
p[len] = '\0';
}
return p;
}
Используйте ее следующим образом:
#include <stdio.h>
int main() {
char *p1 = substr("Hello world\n", 0, 5);
char *p2 = substr("Hello world\n", 6, 5);
printf("%s %s\n", p1, p2);
free(p1);
free(p2);
return 0;
}