【发布时间】:2019-02-23 09:21:29
【问题描述】:
我正在尝试将 int 数组转换为 char 指针字符串(数组值转换为十六进制)。我正在使用代码块编辑器。
所以,
int arr[4] = {30, 40, 15, 205};
应该转换成
char *str = "1e280fcd";
为此,我编写了以下程序:
#include <stdio.h>
#include <string.h>
#include <stdlib.h>
int main()
{
char *cur_str, *prev_str;
char *comp_str, *comp_str_copy;
int arr[] = {30,40,15,205}, i, j, arr_length;
arr_length = (sizeof(arr)/sizeof(arr[0]));
prev_str = malloc(sizeof(0));
cur_str = malloc(sizeof(0));
comp_str = malloc(sizeof(0));
for(i=0;i<arr_length;i++)
{
cur_str = malloc(2);
sprintf(cur_str,"%02x",arr[i]);
comp_str = malloc(sizeof(cur_str)+sizeof(prev_str));
sprintf(comp_str,"%s%s",prev_str,cur_str);
printf("%s\n",comp_str);
free(prev_str);
prev_str = malloc(sizeof(comp_str));
sprintf(prev_str,"%s",comp_str);
if(i==(arr_length-1)){
comp_str_copy = malloc(sizeof(comp_str));
sprintf(comp_str_copy,"%s",comp_str);
}
free(comp_str);
free(cur_str);
}
printf("%s %d\n",comp_str_copy,strlen(comp_str_copy));
return 0;
}
这个程序的输出要么是
- 分段错误或
- 在初始位置具有垃圾值的字符串
我在不同的在线编译器上运行过相同的程序。他们都给出了正确的字符串作为输出。是我使用的编辑器有问题还是我的内存管理方法?
【问题讨论】:
-
sizeof(0)是sizeof(int),大部分是 4。sizeof(cur_str)和sizeof(prev_str)是sizeof(char*),可能是 8。我想你的意思是strlen那里。 -
另外不要忘记 C 中的
char字符串实际上称为 null-terminated 字节字符串。 null-terminator 也需要空格(这意味着两个字符的字符串需要 三个 的空格)。 -
您的输出是纯文本。请将此文本复制并粘贴到您的问题中,而不是添加图像。它们不会增加价值。
标签: c memory-management malloc