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

C语言函数中如何将扫描的字符串返回给指针字符串参数?

问题分析与修复方案

核心错误点

  1. 类型不匹配:*string是对指针的解引用,得到的是单个char类型变量,你试图把一个字符串(本质是指针)赋值给它,必然触发类型不匹配的编译警告,而且完全达不到复制字符串的效果。
  2. 未定义变量:代码里的charInRange既没声明也没赋值,属于无效引用。
  3. scanf输入风险:scanf("%[^\n]", inputs)没有限制输入长度,当输入字符数超过inputs数组的容量(7个元素,最多存6个有效字符+终止符)时,会导致缓冲区溢出;同时输入结束后,换行符会留在输入缓冲区,可能影响后续输入操作。

修复后的代码

首先需要包含string.h头文件以使用字符串复制函数:

#include <stdio.h>
#include <string.h>

void input(char* string, int minimum, int maximum)
{
    char inputs[7];
    // 限制输入长度为6避免溢出,前面加空格跳过缓冲区的换行符
    scanf(" %6[^\n]", inputs);
    // 把输入的字符串复制到目标指针指向的数组中
    strcpy(string, inputs);
}

int main()
{
    char stringValue[7] = { '\0' };
    input(stringValue, 4, 6);
    printf("The string is %s", stringValue);
    return 0;
}

关键修改说明

  • 使用strcpy(string, inputs)替代错误的指针赋值:strcpy会把inputs中的字符串(包括终止符'\0')完整复制到string指向的字符数组中,这才是C语言中传递字符串的正确方式。
  • 给scanf添加长度限制:%6[^\n]表示最多读取6个非换行字符,确保不会超出inputs数组的容量。
  • scanf格式串前加空格:" %6[^\n]"中的空格会自动跳过输入缓冲区中的空白字符(包括之前留下的换行符),避免读取空字符串。

额外提示

如果要严格检查输入长度是否符合minimum和maximum的要求,可以在复制前添加判断逻辑:

int len = strlen(inputs);
if (len < minimum || len > maximum) {
    printf("输入长度不符合要求\n");
    // 这里可以添加重新输入的逻辑
} else {
    strcpy(string, inputs);
}

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.12 01:01:18