C语言函数返回的指针无法正确赋值给主函数指针是什么原因
问题原因
你遇到的是**C语言变量名遮蔽(Variable Shadowing)**问题,根因是你重复定义了同名的encoded变量:
- 你在
main函数开头定义的char* encoded;是外层局部变量,作用域覆盖整个main函数 - 但你在
if(method == 0)和else if(method ==1)的代码块里,又写了char* encoded = xxx;,额外加的char*说明你在块内重新定义了一个同名的局部变量,这个变量的作用域仅限当前代码块内部,出了大括号就会失效 - 你把
manchester的返回值赋值给了块内的局部encoded,外层的encoded从头到尾都没有被赋值,是未初始化的野指针,所以你在块外打印的时候看到的数值和encoded_st完全不一致,访问野指针直接触发段错误
修复方法
删除if/else if块里赋值语句前的char*,直接给外层的encoded变量赋值即可,修改后的代码片段如下:
char* encoded; if(method == 0){ encoded = manchester(bitstring); // 去掉char*,直接给外层变量赋值 } else if (method == 1){ encoded = differential_manchester(bitstring); // 去掉char* } // 建议加非空判断避免崩溃 if(encoded != NULL){ printf("%s", encoded); free(encoded); }
额外优化建议
- 目前
differential_manchester直接返回NULL,如果选择method=1,访问NULL指针依然会崩溃,建议完成实现逻辑后再使用该分支 - 读取输入的
bitstring时建议限制长度避免缓冲区溢出,将scanf("%s", bitstring);改为scanf("%99s", bitstring);,预留位置给字符串结束符\0
内容的提问来源于stack exchange,提问作者Mohamed Ishad
相关产品推荐
相关产品推荐

