You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

C语言函数返回的指针无法正确赋值给主函数指针是什么原因

问题原因

你遇到的是**C语言变量名遮蔽(Variable Shadowing)**问题,根因是你重复定义了同名的encoded变量:

  1. 你在main函数开头定义的char* encoded;是外层局部变量,作用域覆盖整个main函数
  2. 但你在if(method == 0)和else if(method ==1)的代码块里,又写了char* encoded = xxx;,额外加的char*说明你在块内重新定义了一个同名的局部变量,这个变量的作用域仅限当前代码块内部,出了大括号就会失效
  3. 你把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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.05 09:12:01