以下代码打印整数值:
for ( i=0 ; i<COL ; i++ )
{
fprintf(iOutFile,"%02x ",(int)(iPtr[offset]));
}
我想将这些整数值存储为字符指针中的字符串。为此,我尝试了以下代码,但它不起作用。
char *hexVal="";
char *temp;
int val;
for ( i=0 ; i<COL ; i++ )
{
fprintf(iOutFile,"%02x ",(int)(iPtr[offset]));
val = (int)(iPtr[offset]);
temp=(char*) val;
hexVal = strcat(hexVal,temp);
}
printf("%s", hexVal);
感谢名单.......
答案 0 :(得分:1)
由于hexVal
处没有可写内存,因此只会指向包含值为0的字符的只读区域。
您将获得未定义的行为。它是一个有效的字符串,但它是常量且有长度0,你不能追加它。
此外,当然你不能将整数转换为“字符串”,这不是C的工作方式。这样:
temp=(char*) val;
简单地将val
的值重新解释为指针(即作为地址),它不会神奇地计算用于表示地址的正确数字字符序列,即它不会转换{ {1}}到字符串。
您可以使用val
将整数转换为字符串。
所以,总结一下:
snprintf()
的声明更改为例如hexval
,它将它声明为一个包含32个字符的数组,为您提供足够的空间来构建一个数字作为字符串。它也初始化数组,因此第一个字符为0,从而使它成为一个空字符串(有空格来增长)。char hexval[32] = "";
将数字格式化为十进制形式的字符串(应该是snprintf(tmp, sizeof tmp, "%d", 4711);
)。char tmp[16];
将新构建的数字字符串连接到strcat(hexval, tmp);
。hexval
其中man FUNCTION
是标准C库函数,如FUNCTION
)。答案 1 :(得分:1)
写作时
char* hexVal = "";
您正在将hexVal设置为指向字符串文字,稍后在您的代码中尝试strcat到该地址,这将导致未定义的行为。
你需要做的是分配一个足够大的区域来保存你得到的字符串,然后让hexVal指向它。
E.g。
char* hexVal = malloc(100); // or how much bytes you need
然后就这样做
strcat(hexVal, temp);
ALT。在堆栈上分配
char hexVal[100];
答案 2 :(得分:1)
你正在接近这个错误。一般来说,如果你有int i
,那么你不能仅仅char *cp
对i
的地址(或值)进行类型转换,并期望它能够神奇地成为一个字符串,你可以printf
或在strcat
中使用。首先,字符串是以空值终止的,并且没有固定的长度,而int
的固定大小通常为32位长。
您必须创建一个单独的缓冲区(内存空间),snprintf
将很乐意为您创建int
值的字符串表示形式。
我认为你的问题更多的是关于理解编程,指针和C的工作方式,而不是关于int
和字符串及其转换。