C:如何将'x'空格附加/连接到字符串

时间:2014-02-18 13:48:58

标签: c string concatenation spaces

我想在C中的字符串中添加一个可变数量的空格,并希望在我自己实现它之前知道是否有标准的方法。

到目前为止,我用了一些丑陋的方法来做到这一点:

  • 请假设在我调用以下任何函数之前,我注意为我想要连接的空间分配足够的内存

这是我使用的一种方式:

add_spaces(char *dest, int num_of_spaces) {
    int i;
    for (i = 0 ; i < num_of_spaces ; i++) {
        strcat(dest, " ");
    }
}

这个性能更好,但看起来并不标准:

add_spaces(char *dest, int num_of_spaces) {
    int i;
    int len = strlen(dest);
    for (i = 0 ; i < num_of_spaces ; i++) {
        dest[len + i] = ' ';
    }
    dest[len + num_of_spaces] = '\0';
}

那么,你有没有任何标准的解决方案,所以我不重新发明轮子?

3 个答案:

答案 0 :(得分:7)

我愿意

add_spaces(char *dest, int num_of_spaces) {
    int len = strlen(dest);
    memset( dest+len, ' ', num_of_spaces );   
    dest[len + num_of_spaces] = '\0';
}

但正如@self所说,一个同样获得dest最大大小的函数(包括该例子中的'\0')更安全:

add_spaces(char *dest, int size, int num_of_spaces) {
    int len = strlen(dest);
    // for the check i still assume dest tto contain a valid '\0' terminated string, so len will be smaller than size
    if( len + num_of_spaces >= size ) {
        num_of_spaces = size - len - 1;
    }  
    memset( dest+len, ' ', num_of_spaces );   
    dest[len + num_of_spaces] = '\0';
}

答案 1 :(得分:4)

void add_spaces(char *dest, int num_of_spaces) {
    sprintf(dest, "%s%*s", dest, num_of_spaces, "");
}

答案 2 :(得分:1)

  

请假设在我调用以下任何功能之前,我接受了   注意为我想要的空间分配足够的内存   级联

所以在main中假设你将数组声明为char dest[100],然后用speces初始化你的字符串。

喜欢

char dest[100];
memset( dest,' ',sizeof(dest)); 

所以你甚至不需要add_spaces(char *dest, int num_of_spaces)