2012-03-12 30 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