提问人:Nirajan 提问时间:11/17/2023 最后编辑:Nirajan 更新时间:11/17/2023 访问量:50
顺利运行程序代码后显示溢出错误消息
Overflow error message being shown after running the program code smoothly
问:
因此,我一直在创建一个函数,该函数将输入作为字符串,并使用测试函数对其进行检查,该函数完全接受传递给该函数的参数的长度,但每次我运行它时,终端上都会显示某种运行时错误,但程序在我关闭它后运行。 错误消息:
测试用例是这样的:
void test06_inputCString(void) {
char cstringValue[7] = { '\0' };
// Test explicit string length
printf("TEST #6: - Instructions:\n"
"1) Enter the word 'horse' [ENTER]\n" // too short
"2) Enter the word 'chicken' [ENTER]\n" // too long
"3) Enter the word 'SENECA' [ENTER]\n" // just right
":>");
// You may want to comment the next line if you have not yet created the inputCString function:
inputCString(cstringValue, 6, 6);
printf("////////////////////////////////////////\n");
printf("TEST #6 RESULT: ");
printf("%s (expected result: SENECA)\n", cstringValue);
printf("////////////////////////////////////////\n\n");}
我的源代码如下所示:
void inputCString(char* str, int minChar, int maxChar){
int i = 0, valid = 0;
while (valid != 1)
{
scanf(" %[^\n]", str);
int len = 0;
for (i = 0; str[i] != '\0'; i++)
{
len++;
}
str[len] = '\0'; // Replace newline with null terminator
if (len >= minChar && len <= maxChar)
{
valid = 1;
}
else
{
if (minChar == maxChar)
{
printf("ERROR: String length must be exactly %d chars: ", minChar);
}
else
{
if (len < minChar || len > maxChar)
{
printf("Error: String length must be between %d and %d chars: ", minChar, maxChar);
}
}
}
}
}
我认为我分配字符串的方式有一些东西导致函数中的缓冲区溢出,但我似乎没有弄清楚。
该函数需要满足以下指令。
函数:inputCString 此函数的用途是获取 C 字符串值的用户输入,其长度为 (number of characters) 在收到的第 2 个和第 3 个参数(含)指定的字符范围内。
此功能: o 必须接收三 (3) 个参数,因此需要三 (3) 个参数: ▪ 第一个参数是 C 字符串的字符指针 represenFng 注意:假设参数的大小已调整为至少容纳指定的上限 在收到的第三个论点中 ▪ 第二个参数表示用户输入的最小字符数的整数值 value 必须为。 ▪ 第 3 个参数表示用户输入的最大字符数的整数值 值可以是。 o 不返回值,但通过第一个参数参数指针返回 C 字符串。 o 必须验证输入的字符数是否在指定范围内。如果没有,则显示 错误消息(查看示例输出以了解相应的错误消息)。 注意:如果第 2 个和第 3 个参数的值相同,这意味着输入的 C 字符串必须是 特定长度。 o 必须 conFnue 以提示输入有效长度的 C 字符串值 unFl。 o 保证输入一个 C 字符串值,其中包含该范围内的字符数 由第 2 个和第 3 个参数指定(并通过第 1 个参数指针返回)。
答: 暂无答案
评论