我使用920173e3
作为命令行参数调用以下程序:
void getAddr(void* addr)
{
unsigned const char* temp = (unsigned const char*)addr;
printf("%s", &temp[0]);
}
int main(int argc, char *argv[])
{
getAddr(argv[1]);
return 0;
}
printf("%s", &temp[0])
正确打印920173e3
,但如何打印920173e4
和920173e5
等等?
如果我尝试printf("%s", &temp[1])
或temp++
之类的内容,那么printf("%s", &temp[0])
会切断部分原始字符串(920173e3
变为20173e3
,然后0173e3
1}}等等)。
答案 0 :(得分:2)
您的代码不起作用,因为它对字符串而不是数字进行操作。当您打印&temp[0]
时,它与直接打印temp
相同;当你"增加"它,你将指针递增到字符串的开头,所以它从前面删除一个字符。
要将其实际增加为数字,您需要将其转换为1,并将其显示为一个:
void getAddr(unsigned long addr)
{
printf("%lx", addr);
}
int main(int argc, char *argv[]) {
getAddr(strtoul(argv[1], NULL, 16));
return 0;
}
现在你可以正确地增加它等等。