2013-09-23 3 views
-1

У меня есть простой вопрос о string/char. Я попытался реализовать такую ​​базовую систему;Скопировать char * в другой символ []

#include <stdio.h> 
#include <string.h> 

int main() 
{ 
    //I'll use 'char*' for socket receive buffer! 
    const char* input = "This is a test!"; 
    char n[4]; 
    strncpy(n, input, 4); 
    printf("%s\n%i\n", n, strlen(n)); 
    return 0; 
} 

И я получил этот результат:

[email protected] 
7 

Что случилось? Это просто как цикл for/while (IDK).

+1

strncpy должна быть наихудшей разработанной функцией во всем C API. Ожидания OP вполне разумны, strncpy - нет. – john

+0

@john, и thats много говорят, потому что есть много плохих:/ – gbtimmon

+0

@john: 'atoi' довольно плохо. Возврат 0 (что, вероятно, является наиболее распространенным целым числом), чтобы указать на отказ. –

ответ

7

Вам все равно нужно поместить нуль-завершающий символ (\0) в конец.

char n[5] = { '\0' }; // Initializes the array to all \0 
strncpy(n, input, 4); 
+0

Возможно, не совсем ясно, что вы '0' -в целом * массиве в первой строке. – BoBTFish

+0

Какой тихий простой! :) – PilawyerDev

1

Ваш n символ должен быть не менее 5 байт большой (4 символа + нуль-Terminater). После этого вы видите gonk, потому что нет нулевого терминатора \0.

Смежные вопросы