我有以下代碼無法成功運行。 src被分配了一個內存地址,但dest沒有。我使用的Xcode 5命令行開發初學者C:爲什麼兩個變量的初始簽名不同
#include <stdio.h>
#include <string.h>
int main()
{
char* src;
char* dest;
memcpy(src, "This is source", 15);
memcpy(dest, "This is destination", 20);
strcat(dest, src);
printf("Final destination string : |%s|", dest);
return(0);
}
聲明之後,SRC的值是「」,並有一個地址,但dest爲NULL。我知道這是一個愚蠢的問題,但需要一些幫助才能做到這一點。
UPDATE 一堆調查後,我一開始就知道我需要初始化的memcpy前指針的空間,雖然Xcode中沒有提供我有用的警告或異常,我可以很容易找到。
正確的用法是使用malloc初始化空間,然後執行memcpy。
char* src;
char* dest;
src = malloc(sizeof(char)*15);
dest = malloc(sizeof(char)*34);
memcpy(src, "This is source", 15);
memcpy(dest, "This is destination", 20);
或者我們也可以使用char數組並在dest上留下足夠的空間。
char src[15];
char dest[34];
memcpy(src, "This is source", 15);
memcpy(dest, "This is destination", 20);
*您的示例中* src'和'dst'都包含垃圾值。他們*不*初始化。無論他們最初碰到什麼都是純粹的事故。您有責任初始化您的變量。沒有人會爲你做。 – AnT 2014-09-18 21:38:43
我現在知道這個問題有一些負面的問題,所以我不能在SF上提出更多的問題。我會感謝你,如果你看到我的更新,請添加回來的點。對於初學者,你不能認爲這是常識,就好像我不應該問。但是Linux和Mac中的警告和錯誤可能會有所不同,並且有些東西不夠直觀,無法解決這個問題。在Xcode中,當您正在查看溢出數組元素時,它將爲您提供值0,該元素很難判斷 – 2014-09-20 18:59:35