C语言打印数组指针问题:自定义函数调用无输出的求助
问题分析与修复方案
咱们来拆解下你这段代码的问题核心:参数类型不匹配导致内存访问错误,所以函数调用后没有输出。
问题根源
你定义的str是一个char*类型的数组,它的本质类型是char**(指向指针的指针)。但你写的printArr函数参数是char* arr,这俩类型完全不兼容。当你把str传给printArr时,编译器会做隐式类型转换,但在函数内部执行*(arr+index)时,实际访问的内存地址是错误的,自然读不到正确的字符串内容。
而你注释掉的printf(*(str+1));能正常运行,是因为str本身是char**类型,str+1指向数组的第二个元素,解引用后得到的是char*类型的字符串指针,完全符合printf的要求。
修复方案
这里给你两种靠谱的修复方式:
方案1:修改函数参数类型(推荐)
把printArr的第二个参数改成char** arr,让它和str的类型匹配,这样就能正确访问数组里的字符串了:
#include <stdio.h> #include <string.h> void printArr(int index, char **arr); char *str[] = {"heyyo","help"}; int main() { printArr(1, str); return 0; } void printArr(int index, char **arr){ printf("%s", *(arr+index)); // 建议加上%s格式符,编程更规范 }
方案2:调用时强制类型转换(不推荐)
如果不想修改函数参数,也可以在调用时把str强制转换成char*,但这种方式不够直观,容易埋下隐患,不建议常用:
printArr(1, (char*)str);
另外补充个小细节:使用printf输出字符串时,最好明确写上%s格式说明符,虽然有些情况下直接传字符串指针也能运行,但明确格式符是更严谨的编程习惯哦~
内容的提问来源于stack exchange,提问作者dub
相关产品推荐
相关产品推荐

