0
我想將指針char* name
指定爲char* path
。我從scanf獲得名稱的值。可能嗎?如何將指向char的指針插入指向char的另一個指針
char* path = "/home/user/Desktop/name.jpg";
我知道這是錯的,但我想這對以這種方式
我想將指針char* name
指定爲char* path
。我從scanf獲得名稱的值。可能嗎?如何將指向char的指針插入指向char的另一個指針
char* path = "/home/user/Desktop/name.jpg";
我知道這是錯的,但我想這對以這種方式
我假設你的意思是你有:
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"
您可以複製使用了幾個函數字符串工作。 ,想到的第一件事是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);
我不明白這個問題。說'路徑=名稱'通常不是錯誤的,而是做你所要求的。 –
這裏要小心 - 問題是C中的字符串處理並不明顯。 char *只是指向字符串中第一個字符的指針;不知何故,需要將內存分配給它指向的內容。 strdup()是複製現有字符串的安全方法。 Scanf()對於讀入字符串緩衝區是危險的,因爲它很容易溢出目標緩衝區,除非格式字符串正確地限制了輸入。 – ash
順便說一句,沒有必要複製字符串,如果它不會被修改; path = name在這種情況下工作得非常好。 – ash