在C中,当int列表转换为char列表时会发生什么?
在下面的示例中,我尝试将代表a、b、c的ASCII整数值列表从整数列表转换为字符列表:在C中,当int列表转换为char列表时会发生什么?,c,C,在下面的示例中,我尝试将代表a、b、c的ASCII整数值列表从整数列表转换为字符列表: int main() { int myList[3] = {97, 98, 99}; // a, b, c in ASCII char * myCharList = (char*) myList; printf("%c\n", myCharList[0]); printf("%c\n", myCharList[1]); print
int main() {
int myList[3] = {97, 98, 99}; // a, b, c in ASCII
char * myCharList = (char*) myList;
printf("%c\n", myCharList[0]);
printf("%c\n", myCharList[1]);
printf("%ld\n", strlen(myCharList));
return 0;
}
输出:
a
1
为什么强制转换int列表会创建长度仅为1的字符列表
编辑:
我想我现在开始明白了。再举一个例子,如果我像这样修改代码:
#include <stdio.h>
#include <string.h>
int main() {
int myList[3] = {255 + 101, 98, 99};
char * myCharList = (char*) myList;
printf("%c\n", myCharList[0]);
printf("%c\n", myCharList[1]);
printf("%ld\n", strlen(myCharList));
return 0;
}
因为整数是两个字节,所以此指针不能是长度大于2的列表。您没有将整数列表转换为字符列表 myList是一个int数组。但是,在大多数表达式1中使用数组时,它会转换为指向其第一个元素的指针 所以char*myList将指向myList[0]的指针转换为指向char的指针。不执行列表的转换;只转换指针 结果是myCharList指向内存中myList的字节 在您的系统中,int值首先以最低有效字节存储。很可能,它们有四个字节,因此表示int 97的字节是0、0、0和97,按从最高有效到最低有效的顺序排列。所以内存中的字节,从低位地址到高位地址,是97,0,0,0 当您将strlen应用于此时,它会看到97字节,然后会看到一个零字节,这标志着字符串的结束。所以strlen报告内存中这个“字符串”的长度是1 要将整数列表转换为包含整数数字的字符串列表,例如将97转换为“97”,必须使用sprintf之类的例程,该例程可以将数字格式化为printf,但可以将结果写入字符数组,而不是标准输出或编写其他源代码来执行转换。您必须通过定义足够大的数组来保存结果,或者使用malloc来分配空间,从而为写入字符的位置提供内存 脚注
当它不是sizeof或一元&的操作数且不是用于初始化数组的字符串文字时为1。答案如下:。以+2票寻找答案。+1请注意,某些架构(如OpenRISC)首先存储最重要位的整数,因此在这些架构上,strlen将返回0,而不会打印任何内容。无论编写什么代码来将int转换为char,都需要考虑到这一点,以便于移植。
d
2