2015-01-02 211 views
0

我想將指針char* name指定爲char* path。我從scanf獲得名稱的值。可能嗎?如何將指向char的指針插入指向char的另一個指針

char* path = "/home/user/Desktop/name.jpg"; 

我知道這是錯的,但我想這對以這種方式

+0

我不明白這個問題。說'路徑=名稱'通常不是錯誤的,而是做你所要求的。 –

+1

這裏要小心 - 問題是C中的字符串處理並不明顯。 char *只是指向字符串中第一個字符的指針;不知何故,需要將內存分配給它指向的內容。 strdup()是複製現有字符串的安全方法。 Scanf()對於讀入字符串緩衝區是危險的,因爲它很容易溢出目標緩衝區,除非格式字符串正確地限制了輸入。 – ash

+0

順便說一句,沒有必要複製字符串,如果它不會被修改; path = name在這種情況下工作得非常好。 – ash

回答

4

我假設你的意思是你有:

char *name = "fred"; 
char *format = "/home/user/Desktop/name.jpg"; 

你想採取然後這樣,你有什麼結果:

char *result = "/home/user/Desktop/fred.jpg"; 

要做到這一點,你需要分配一些內存(或分配足夠的其他地方),然後用sprintf()snprintf()

char *name = "fred"; 
char *format = "/home/user/Desktop/%s.jpg"; 

char *result = malloc(strlen(format) - 2 + strlen(name) + 1); 
sprintf(result, format, name); 

printf("%s\n", result); // Output is "/home/user/Desktop/fred.jpg" 
1

您可以複製使用了幾個函數字符串工作。 ,想到的第一件事是memcpy

char* name = "/home/user/Desktop/name.jpg"; 
char* path; 

size_t len = strlen(name); 
path = malloc(len + 1); /* plus 1 for the null terminator */ 

if(path == NULL) exit(1); 

memcpy(path, name, 1 + len); 

/* do whatever */ 

free(path); 
相關問題