C语言函数中如何将扫描的字符串返回给指针字符串参数?
问题分析与修复方案
核心错误点
- 类型不匹配:
*string是对指针的解引用,得到的是单个char类型变量,你试图把一个字符串(本质是指针)赋值给它,必然触发类型不匹配的编译警告,而且完全达不到复制字符串的效果。 - 未定义变量:代码里的
charInRange既没声明也没赋值,属于无效引用。 - 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
相关产品推荐
相关产品推荐

