【发布时间】:2019-09-14 17:07:25
【问题描述】:
我编写了一个与符号无关的函数以十六进制格式打印char 字符串。
void print_char2hex(void* cp) {
const char *arr = (char *) cp;
size_t i;
for(i = 0; i < strlen( arr ); i++) {
printf("%02X ", 0xFF & arr[i]);
}
}
为什么下面的代码不能编译?
void print_char2hex(const void *cp) {
size_t i;
for (i = 0; i < strlen( * (const char *) cp ); i++) {
printf("%02X ", 0xFF & cp[i]);
}
}
这是错误信息:
passing argument 1 of strlen makes pointer from integer without a cast [-Wint-conversion]
【问题讨论】:
-
您将 $cp$ 类型转换为 $const char*$,然后将取消引用的值传递给 $strlen$。基本上,您试图将 $const char$ 传递给 $strlen$。删除取消引用。
-
此外,无法取消引用指向 void(也不是索引)的指针
-
@RandomPerfectHashFunction 你打算在那里使用反引号......
-
@AnttiHaapala 是的,我没有看到下面的 $cp[i]$。这也需要在索引之前进行类型转换。反引号是什么意思?
-
反引号是`字符(也称为重音);它分隔内联
code blocks。
标签: c pointers dereference