這幾乎肯定是因爲你沒有爲你的字符串分配空間。
原因myargv[1]="123";
的工作原理是因爲您將指針設置爲指向已存在的字符串(編譯器通常將該「123」放入預先初始化的內存中並且它只是被加載)。通過使用類似:
char *myargv[10];
strcpy (myargv[1], "anything");
你通常遇到的問題,因爲沒有分配的後備存儲爲myargv[1]
指針。
你可以做的是簡單地設置myargv[1]
直接到緩衝區,你sprintf
-ed字符串:
char sprintf_buffer[whatever];
sprintf (sprintf_buffer, "%d", myInteger);
myargv[1] = sprintf_buffer;
或者,如果您正在重新使用該緩衝區(這樣值被多個整數參數覆蓋),請使用strdup
。
char sprintf_buffer[whatever];
sprintf (sprintf_buffer, "%d", myInteger1);
myargv[1] = strdup (sprintf_buffer);
sprintf (sprintf_buffer, "%d", myInteger2);
myargv[2] = strdup (sprintf_buffer);
如果由於某種原因,你的平臺不有一個strdup
,這裏有一個適合你:
char *strdup (const char *s) {
char *d = (char *)(malloc (strlen (s) + 1));
if (d != NULL)
strcpy (d,s);
return d;
}
請記住,你應該總是從strdup
檢查返回值確保內存分配工作。我把它留在這裏,因爲它與手頭的問題無關。
可避免與多個緩衝區的內存分配(前提是你知道緩衝區的絕對數量,你需要提前):
char sprintf_buffer1[whatever];
char sprintf_buffer2[whatever];
sprintf (sprintf_buffer1, "%d", myInteger1);
myargv[1] = sprintf_buffer1;
sprintf (sprintf_buffer2, "%d", myInteger2);
myargv[2] = sprintf_buffer2;
向我們展示一些代碼。我的猜測是你沒有爲目標字符串分配任何內存。 – 2010-08-10 05:23:34