[英]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);
}
(char*)malloc(2*sizeof(char));
更改為malloc(3*sizeof*buffer);
您需要一個額外的字節來存儲終止空字符,該字符用於指示end-of-string
。 另外,請勿強制轉換malloc()
的返回值。 多虧了
在您的情況下,通過strncpy()
,您提供了n
作為2
,它沒有任何作用域來存儲終止空字節。 如果沒有結尾的null,則printf()
將不知道在哪里停止。 現在,有了3個字節的內存,您可以使用strcpy()
正確復制字符串
萬一n
等於提供的緩沖區的大小, strncpy()
不會自己添加終止null,因此變得非常不可靠(與strcpy()
不同)。 您需要以編程方式進行處理。
在此處檢查手冊頁中的strncpy()
和strcpy()
。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.