我可以为字符指针数组分配一个整数吗?

时间:2015-10-07 11:36:41

标签: c malloc

int k=5;
char* result = (char *)malloc(100 * sizeof(char));
result[count] = k;

考虑到上面的代码,如果我打印result[count]的内容,它会打印笑脸符号。我尝试过如下,但没有用。

result[count]=(char)k;

任何人都可以帮助我吗?

我发现malloc(100*sizeof(char))会创建100每个字符大小的连续块。如果我错了,请纠正我?

4 个答案:

答案 0 :(得分:2)

我会忽略所有关于数组和malloc的漏洞,因为它与你描述的问题无关。你似乎基本上会问“这段代码会打印什么:”

char c = 5; 
printf("%c", c);

它会在符号表中打印符号5,很可能是不可打印的字符。遇到不可打印的字符时,某些实现会选择打印非标准符号,例如表情符号。

如果要打印数字5,则必须使用字符文字:

char c = '5';
printf("%c", c);

或者使用“神奇数字”的穷人风格:

char c = 53;   // don't write code like this
printf("%c", c);

答案 1 :(得分:1)

这是字符表示的问题。让我们先从相反的方向开始。 char可以升级为int,但如果你这样做,你会获得角色的表示(其代码)。假设您使用ASCII:

char c = '5';
int i = c; // i is now 0x35 or 53 ASCII code for '5'

您的示例恰恰相反,5可以用char表示,因此result[count] = k已定义(即使您应该收到可能的截断警告),但代码5的ASCII char是控制代码ENQ和将使用代码页850或437在Windows系统上打印为

一半便携式(未指定,但已知适用于所有常见架构)转换方式(int) 5 - > (char) '5'要记住代码' 0'到' 9'是连续的(对于' A' Z'以及' a到' z'),所以我认为你想要的是:

result[count] = '0' + k;

答案 2 :(得分:0)

首先,让我们稍微清理你的代码:

int k=5;
char* result = malloc(100);
result[count] = k;
任何平台下

sizeof(char)总是等于1,你不需要在C中强制转换malloc()。

这就是说,只要你的count变量包含0到99之间的值,你就没有做错任何事。如果要打印实际字符'5',则必须分配该字符的ASCII值(53),而不仅仅是数字5.此外,请记住,如果该字符数组必须被解释为字符串,你需要用'\ 0'终止它:

int k=5, i;
char* result = malloc(100);
for (i=0; i<98; i++) {
    result[i] = ' ';
}
result[98] = 53;
result[99] = '\0';
printf("%s\n", result);

答案 3 :(得分:-1)

您尝试分配的数组中的元素都是char的大小,1个字节。一个int是4个字节,因此你的问题。如果你想在一个数组中存储整数:

int result[100];

接下来存储价值,但老实说,从您提出问题的方式来看,我不知道这是否真的是您尝试做的事情。尝试用你想要完成的任务来重新描述帖子。

您是否尝试将5作为角色存储?