首先,看看下面簡單的代碼:當我們初始化數據類型char *和什麼時候沒有?
char str[80] = "This is - my text - for test";
const char s[2] = "-";
char *token;
token = strtok(str, s);
while (token != NULL) {
printf(" %s\n", token);
token = strtok(NULL, s);
}
strtok()
返回的數據類型char*
的功能,正如你看到的,我們創建了一個名爲token
變量未初始化變量。
現在,看下面的代碼:
char *buff;
int num = 500;
sprintf(buff, "%d", num);
以前的代碼的結果是一個錯誤uninitialized local variable 'buff'
。
我的問題是,爲什麼在第一個代碼中沒有發生任何問題,而在第二個代碼中發生錯誤?
'char * token = strtok(str,s);' –
@PeteBecker:這是直接分配的。 –
這是**初始化**。原始代碼創建未初始化的'token',然後**爲其分配**。對於像'int'和指針這樣的簡單類型,差異在技術上有時並不重要(假設你在創建未初始化變量後立即進行賦值),但出錯的機率要高得多。但對於構造者做重要工作的類型而言,存在很大差異。 –