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

函数无法读取Double数组及C语言代码输出Hello (null)问题咨询

问题解答

问题一:无法使函数读取Double数组

要让函数正确读取Double数组,核心是搞清楚C语言里数组的传递规则——数组作为参数传递时会退化为指向首元素的指针,同时得手动传递数组长度(因为函数没法直接获取数组的实际长度)。我给你举个最常用的正确示例:

#include <stdio.h>

// 函数接收double数组指针和数组长度
void readDoubleArray(double *arr, int length) {
    printf("读取到的数组元素:\n");
    for (int i = 0; i < length; i++) {
        // 如果是要从键盘读取数据到数组里,用scanf("%lf", &arr[i]);
        printf("%.2f ", arr[i]);
    }
    printf("\n");
}

int main() {
    double nums[] = {1.2, 3.4, 5.6, 7.8};
    // 计算数组长度:总字节数除以单个元素字节数
    int len = sizeof(nums) / sizeof(nums[0]);
    // 直接传递数组名(会自动转为指针)和长度
    readDoubleArray(nums, len);
    return 0;
}

常见的踩坑点要注意:

  • 别忘传数组长度:指针本身没法知道数组有多长,必须手动传入。
  • 格式符别用错:读取double类型要用%lf,而不是给float用的%f。
  • 参数类型要匹配:别把double数组传给参数是float*的函数,会导致类型错误。

如果你的场景是从文件读取或者有其他特殊需求,可以补充代码细节,我再帮你调整。


问题二:打印名称出现“Hello (null)”的原因分析

咱们一步步拆解你的代码问题:

1. 数组维度写反了

你定义的char NAME[10][5];表示10个字符串,每个最多存4个字符+1个结束符\0,但需求是存5个长度不超过10字符的名称,应该写成char NAME[5][11];(10个字符加结束符需要11个存储空间)。现在的定义会导致输入过长时缓冲区溢出,破坏内存数据。

2. printname函数的两处错误

  • 调用函数时多了&:NAME[NAMECOUNTER]本身就是指向该字符串首元素的指针,直接传NAME[NAMECOUNTER]就行,加&虽然不会直接报错,但属于多余操作。
  • printf里用错了参数:%s需要的是字符串的首地址(char*类型),但你写的*s是取指针指向的第一个字符(char类型),把字符当成地址传入,这个地址大概率无效,所以输出(null)或者乱码。

3. scanf没限制长度,容易溢出

直接用scanf("%s", ...)如果输入字符超过数组长度,会导致缓冲区溢出,应该改成scanf("%10s", NAME[NAMECOUNTER]);(对应修正后的数组维度),限制输入长度。

修正后的代码:

#include <stdio.h>

void printname(char *s);

int main() {
    // 5个字符串,每个最多存10个字符+1个结束符
    char NAME[5][11];
    int NAMECOUNTER = 0;
    while (NAMECOUNTER < 5) {
        // 限制输入长度为10,避免缓冲区溢出
        scanf("%10s", NAME[NAMECOUNTER]);
        // 直接传递字符串首地址
        printname(NAME[NAMECOUNTER]);
        NAMECOUNTER++;
    }
    return 0;
}

void printname(char *s) {
    // %s对应char*类型,直接传s即可
    printf("Hello %s\n", s);
    return;
}

这样运行就能正常打印输入的名称了。


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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.09 17:42:52