2012-11-12 28 views
0

我在C中玩弄strncpy,並遇到一些麻煩。不兼容的格式類型

的代碼如下:

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

int main(int argc, char *argv[]) 
{ 
    char src[] = "Benjamin Franklin"; 
    char dest[5]; 

    strncpy(src, dest, sizeof(dest)/sizeof(char)); 
    dest[5] = '\0'; 

    printf("%s\n", dest); 

    return 0; 
} 

與使用沒有錯誤編譯:

gcc -Wall -g -Werror test.c -o test 

,並打印出亂碼像

p4�� 

我真的不能明白我特別是因爲我玩了很多東西,並一直在網上尋找答案。也許因爲我使用數組,我將地址傳遞給printf而沒有意識到它?

回答

3

您的參數向後。 strncpy將第二個字符串複製到第一個字符串中,如此。

strncpy(dest, src, sizeof(dest)/sizeof(char)); 
+0

+1我正要給出相同的答案2秒晚:) –

+0

什麼是失敗的我。多謝你們!!! – nebffa

2

您程序中的兩個錯誤。

1.您交換了strncpy的參數。

2.Also you 無法訪問dest[5],因爲dest[4]是您有權訪問的最後一個成員。

重寫你的程序如下,它應該工作。

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

int main(int argc, char *argv[]) 
{ 
    char src[] = "Benjamin Franklin"; 
    char dest[5]; 

    strncpy(dest, src, sizeof(dest)/sizeof(char)); 
    dest[4] = '\0'; 

    printf("%s\n", dest); 

    return 0; 
} 

高興地看到,你已經使用strncpy代替strcpy。使用具有長度限制的字符串操作函數總是一個很好的習慣。

閱讀關於strncpyhere