c - 从 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]
我究竟做错了什么?谢谢。
解决方案
您正在尝试将字符串分配给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);
}
推荐阅读
- php - Magento 2 checkout_onepage_controller_success_action 事件未触发
- git - 如何合并外部更改到分支
- c++ - 为什么 std::future 从 std::packaged_task 和 std::async 返回不同?
- ios - 键盘出现时是否可以“向上推”整个应用程序?
- typescript - 将在 Typescript 中使用 --strictNullChecks 从 DB 或 API 接收异步数据的变量的类型?
- python - 熊猫根据来自另一个数据帧的组创建多个数据帧
- flutter - 在散点图中改变半径和颜色颤动
- reactjs - 组件未在 React useState 中更新
- dropdown - ACA 应用程序不将 repo 约束属性显示为下拉列表
- c++ - C++运算符++重载是如何工作的