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

C语言多文件编程doit模块retrian函数及printf不生效问题求助

问题排查

  • 1 野指针非法访问:doit.c中定义的char *ptr没有分配任何可写内存,直接写入内容会触发段错误,是程序无法运行的核心原因。
  • 2 缺少字符串结束符:字符串复制完成后没有给目标内存末尾添加\0,后续用%s输出时会读到内存垃圾,出现乱码。
  • 3 返回值缺失:retrian函数声明为int返回类型,但实际没有写return语句,部分编译器会直接报错无法编译。
  • 4 输入越界风险:main.c中没有限制输入长度,用户输入超过29个字符时会溢出data数组的内存范围。

修正后代码

main.c

#include <stdio.h>
int retrian(const char *message);
int main()
{
    char data[30];
    int i = 0;    
    char n;    
    
    do    
    {
        n = getchar();
        data[i] = n;
        i++;
    } while (n != '\n' && i < 29); // 限制输入长度避免越界
    data[i] = '\0';
    
    retrian(data);
    return 0;
}

doit.c

#include <stdio.h>
#include <stdlib.h>
int retrian(const char *message)
{
    // 计算输入字符串长度
    int len = 0;
    while(*(message + len) != '\0') len++;
    // 为目标指针分配对应大小的内存
    char *ptr = (char*)malloc(len + 1);
    if (ptr == NULL) return -1;

    // 指针操作复制字符串
    for(int k = 0; k < len; k++)
    {
        *(ptr + k) = *(message + k);
    }
    *(ptr + len) = '\0'; // 补字符串结束符

    printf("%s is printing\n", ptr);
    free(ptr); // 释放内存避免泄漏
    return 0;
}

内容的提问来源于stack exchange,提问作者sungwon

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.05 09:48:00