2012-03-12 29 views
-2

如何複製C中的字符串以便不重疊舊值?我使用strcpy(),但它清潔dest設置值爲src在C中複製字符串

char* foo = " This is my  string \0"; 
char* new = malloc(strlen(str) + 1); 
char* token; 
int size = 0; 

token = strtok(foo, " \t"); 
while(NULL != token) 
{ 
    int i; 
    for(i = 0; token[i] != '\0'; i++) 
    { 
     new[size++] = token[i]; 
    } 

    new[size++] = ' '; 
    token = strtok(NULL, " \t"); 
} 
new[size] = '\0'; 

我想爲這段代碼的替代:

int i; 
for(i = 0; token[i] != '\0'; i++) 
{ 
    new[size++] = token[i]; 
} 

new[size++] = ' '; 

在C中的本地方法做到這一點的?我在string.h找不到任何功能。提前致謝。

+3

請處理你的代碼格式,並且作爲一般規則,不要在C中命名變量'new',就好像你的代碼曾經用在C++項目中一樣,它會導致很多頭痛。 – 2012-03-12 18:26:27

+3

等一下,'strcpy'有什麼問題?這似乎正是你應該使用的。 – jwodder 2012-03-12 18:26:35

+0

'strncpy'應該是你正在尋找的。或者,您能否詳細說明您的問題,以便我們知道您真正想要做什麼?當然'dest'正在清理?! – Gandaro 2012-03-12 18:26:55

回答

2

strdup怎麼樣?它甚至爲你分配目標緩衝區。

+0

我認爲推薦'strndup'會更好...... – Gandaro 2012-03-12 18:28:39

+0

如果使用'strtok',則不需要使用'strncpy'和'strndup'。但是,代碼正在將'strtok'應用於字符串文字(由'foo'指向),這是一個禁忌。也許'strspn'和'strcspn'應該用來代替'strtok'。 – 2012-03-12 20:46:11