簡體   English   中英

C程序打印奇怪的字符

[英]C program printing weird characters

我有一個程序可以讀取文件的內容並將其保存到buf 閱讀內容后,應該將兩個兩個字符復制到一個數組中。 如果我不嘗試從文件中讀取代碼,則此代碼可以正常工作,但是如果我嘗試從文件中讀取代碼,則緩沖區中的printf會打印出我想要的兩個字符,但會添加奇怪的字符。 我已經確認並將其正確保存到buf中,那里沒有奇怪的字符。 我不知道怎么了...這是代碼:

char *buffer = (char*)malloc(2*sizeof(char));
char *dst = buffer;
char *src = buf;
char *end = buf + strlen(buf);
char *baby = '\0';
while (src<= end)
{
    strncpy(dst, src, 2);
    src+= 2;
    printf("%s\n", buffer);
}
  1. (char*)malloc(2*sizeof(char)); 更改為malloc(3*sizeof*buffer); 您需要一個額外的字節來存儲終止空字符,該字符用於指示end-of-string 另外,請勿強制轉換malloc()的返回值。 多虧了

  2. 在您的情況下,通過strncpy() ,您提供了n作為2 ,它沒有任何作用域來存儲終止空字節。 如果沒有結尾的null,則printf()將不知道在哪里停止。 現在,有了3個字節的內存,您可以使用strcpy()正確復制字符串

萬一n等於提供的緩沖區的大小, strncpy()不會自己添加終止null,因此變得非常不可靠(與strcpy()不同)。 您需要以編程方式進行處理。

在此處檢查手冊頁中的strncpy()strcpy()

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM