我有下一个代码,其中我有一个字符串“hello world”,它必须将每个字符转换为ASCII值,但它不是打印[68656C .....]而是在它之后打印一些空格'[',像这样[...... 68656C]。我找不到
的原因#include <stdio.h>
#include <stdlib.h>
#include <string.h>
int main()
{
int i,lon;
char *cod_maq,*c = {"hello world"},c[2];
lon = strlen(c);
cod_maq = (char*)malloc((lon+1)*sizeof(char));
for(i = 0;i < lon;i++)
{
sprintf(c,"%X",c[i]);
strcat(cod_maq,c);
}
printf("[%s]\n",cod_maq);
return 0;
}
感谢
答案 0 :(得分:2)
malloc中的内存已包含您需要重置的数据。 malloc分配内存它没有初始化它,所以你只是得到以前的随机垃圾。
memset(cod_maq, 0, size_of_cod_maq)
答案 1 :(得分:0)
sprintf(c,"%X",c[i]);
:非常糟糕。
修复如下:
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
int main(){
int i,lon;
char *cod_maq, *c = {"hello world"};
lon = strlen(c);
cod_maq = (char*)malloc((lon*2 + 1) * sizeof(char));//2 required per character
for(i = 0; i < lon; i++){
sprintf(cod_maq + i*2, "%02X", c[i]);
}
printf("[%s]\n", cod_maq);
free(cod_maq);
return 0;
}