2013-02-21 16 views
0

如果我有計劃修改字符串字面傳過來的函數

int main(){ 
    char *name = "New Holland"; 
    modify(name); 
    printf("%s\n",name); 
} 

調用此函數

void modify(char *s){ 
    char new_name[10] = "Australia"; 
    s = new_name;   /* How do I correct this? */ 
} 

我怎麼可以更新字符串字面名稱的值的函數(現在等於新的荷蘭)與澳大利亞。

我想這個問題,我面對的是new_name的是本地存儲,因此函數返回後,該變量不存儲

回答

2

試試這個:

#include <stdio.h> 

void modify(char **s){ 
    char *new_name = "Australia"; 
    *s = new_name; 
} 

int main(){ 
    char *name = "New Holland"; 
    modify(&name); 
    printf("%s\n", name); 
    return 0; 
} 

如果定義new_name爲數組那麼它將成爲一個局部變量,而不是上面定義的一個指向字符串文字的指針。另外,在C中,參數是按值傳遞的,因此您需要將指針傳遞給要修改的對象。

1

嘗試這種情況:

#include <stdio.h> 
#include <string.h> 

#define MAX_NAME_LEN 50 

void modify(char *mdf){ 
    char *new_name = "Australia"; 
    strcpy(mdf,new_name); 
} 

int main(){ 
    char name[MAX_NAME_LEN] = "New Holland"; 
    modify(name); 
    printf("%s\n", name); 
    return 0; 
} 

使用的strcpy/memcpy的到本地數組變量兵到外字符串文字。