首页 > 解决方案 > 从 C 中的整数向量创建一个字符串

问题描述

我正在尝试从向量创建一个字符串,如下所示: int vector[3] = {1, 2, 3}.

然后,我会得到的字符串应该是: [1, 2, 3]存储在某个char[]变量中。

我试图动态地做到这一点,如下所示:

void print_vector(int *vector, int lon){
    char *str = (char*)calloc(3*lon, sizeof(char));
    str[0] = "[";
    str[1] = (char) vector[0];

    for(int i = 1; i < lon; i += 3){
        str[i] = (char)vector[i];
        if(i != lon - 1){
            str[i + 1] = (char)",";
            str[i + 2] = " ";
        }else{
            str[i + 1] = "]";
        }
    }

    printf("%s\n", str);
}

其中lon是向量的长度,但我从编译器收到此警告:

警告:从“char *”对“char”的赋值从指针创建一个整数,没有转换[-Wint-conversion]

我究竟做错了什么?谢谢。

标签: cstringint

解决方案


您正在尝试将字符串分配给char数组元素。您需要使用单引号来创建char常量。

所以

str[0] = "[";

应该

str[0] = '[';

对于所有其他任务也是如此。

另一个问题是(char)vector[i]不会返回数字中的字符表示vector[i]。它只是使用整数作为字符代码。因此,如果vector[i]为 1,则产生'\1',而不是'1'。获取数字字符表示的方法是使用'0' + vector[i].

最后,您需要在字符串的末尾添加一个空终止符,以便您可以使用%s格式打印它。并且您应该在返回之前释放它以防止内存泄漏。

其他问题:您只是将每个第三个元素vector放入字符串中。您需要为vector和使用单独的索引str。并且数组索引从 开始0,而不是1

void print_vector(int *vector, int lon){
    char *str = (char*)calloc(3*lon, sizeof(char));
    str[0] = "[";
    str[1] = (char) vector[0];

    for(int i = 0; i < lon; i++){
        str[i*3] = '0' + vector[i];
        if(i != lon - 1){
            str[i*3 + 1] = ',';
            str[i*3 + 2] = ' ';
        }else{
            str[i*3 + 1] = ']';
            str[i*3 + 2] = '\0';
        }
    }

    printf("%s\n", str);
}

推荐阅读