2012-07-23 108 views
3
int counter = 0; 
char *jpg_name; 
sprintf(jpg_name, "%3i.jpg", counter); 
FILE *photo = fopen(jpg_name, "w"); 
counter++; 

我不斷收到以下錯誤:「jpg_name」可在此功能中使用未初始化[-Werror =未初始化]

'jpg_name' may be used uninitialized in this function [-Werror=uninitialized] 

我想寫使用sprintf功能的文件名。我想我必須以某種不正確的方式宣佈char*,但我不知道如何正確地做到這一點。

回答

2

這是抱怨,因爲你正在使用未初始化的指針,而不是因爲內容。嘗試malloc一些記憶。可以使用char數組。


旁註:你可能會考慮snprintf而不是sprintf

+0

好的。這是一個數組,如果我需要三個字符,我應該malloc足夠的內存三個字節,以及足夠的字節爲字符「jpg_name」? (任何數組中的第一個槽被數組的名稱佔用,對吧?) – hannah 2012-07-23 19:00:08

+0

@newbie_hannah只需要計算符號的數量:-) – cnicutar 2012-07-23 19:00:56

+1

您需要爲所有要添加的字符分配足夠的空間,以及1用於空終止符字符的附加插槽。沒有插槽用於數組的名稱,變量名稱只是指向您分配的內存。 – pb2q 2012-07-23 19:01:02

0

您需要爲正在創建的字符串分配內存。

char jpg_name[MAX_LEN + 1]; 
snprintf(s, MAX_LEN, "%3i.jpg", counter); 

您還可以使用malloc

jpg_name = malloc(sizeof(char) * (MAX_LEN + 1)); 

在你的情況,MAX_LEN至少應爲5,假設你只有個位數的計數器。如果您的計數器可以增加到多位數,則需要使用更大的MAX_LEN來計算。

至於你的錯誤:編譯器會在你使用尚未初始化的變量時發出警告:設置爲某個值。您沒有初始化您的char*,因此編譯器會抱怨,但這也可能發生,例如與未初始化的int。養成將變量初始化爲默認值的習慣。