2014-09-10 76 views

回答

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

char *concatenate(size_t size, char *array[size], const char *joint){ 
    size_t jlen, lens[size]; 
    size_t i, total_size = (size-1) * (jlen=strlen(joint)) + 1; 
    char *result, *p; 


    for(i=0;i<size;++i){ 
     total_size += (lens[i]=strlen(array[i])); 
    } 
    p = result = malloc(total_size); 
    for(i=0;i<size;++i){ 
     memcpy(p, array[i], lens[i]); 
     p += lens[i]; 
     if(i<size-1){ 
      memcpy(p, joint, jlen); 
      p += jlen; 
     } 
    } 
    *p = '\0'; 
    return result; 
} 

int main(){ 
    char *ss[] = { "first", "second", "last" }; 
    char *cat = concatenate(3, ss, ""); 
    puts(cat); 
    free(cat); 
    cat = concatenate(3, ss, ", "); 
    puts(cat); 
    free(cat); 
    return 0; 
} 
0

首先确保目标的大小,如果至少超过一人,所有
一起数组中的字符串的大小,否则你会写出来的字符串
某些随机存储器地址不会被您访问,并且您最终可能会遇到分段错误

它更好地使用“strncat”而不是“strcat”,前者将使您只复制预期的字节数量的
。 不要忘记在成功复制所有字符串后追加空终止符。

相关问题