gpt4 book ai didi

c - 测试用例在特定行失败。手动工作正常 - C(大海捞针)

转载 作者:行者123 更新时间:2023-11-30 16:36:37 32 4
gpt4 key购买 nike

我有一个 C 程序,它从命令行获取参数。以相反的顺序打印参数。并在大海捞针中找到针/子串。我有以下代码:

哑巴.c

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

#include "Dumb.h"

int main(int argc, char **argv)
{
int i, j, flag = 0;
for (i = 1; i < argc; i++)
{
char needle[] = "dumb";
int length = strlen(argv[i]);

for (j = length - 1; j >= 0; j--)
{
printf("%c", argv[i][j]);
argv[i][j] = tolower(argv[i][j]);
}

char *pch = strstr(argv[i], echo);
if(pch)
{
flag = 1;
}
}

if (flag == 1)
{
printf("Dumb was found!\n");
}

return 0;
}

当我尝试使用以下命令从命令行手动运行它时,它工作得很好:./a.out Dumb

但是当我尝试对其使用特殊的测试用例时,它只是在这一行崩溃:argv[i][j] = tolower(argv[i][j]);

以下是测试代码:

TestLauncher.c

int unit_test(int argc, char **argv);

int main(int argc, char **argv)
{
unit_test(argc, argv);
return 0;
}

测试.c

int __hide_main__(int argc, char **argv);

int unit_test(void)
{
int retval;
char **array;
array = malloc(sizeof(char *) * 2);
array[0] = "./a.out";
array[1] = "Dumb";

retval = __hide_main__(2, array);

free(array);
return retval;
}

最佳答案

当您使用字符串文字“Dumb”时,它是只读的,与命令行参数不同。要查看这一点,请尝试运行以下命令,您应该会得到相同的错误:

char *arr = "Dumb";
arr[0] = 'd';

要解决此问题,您应该将 argv 的值复制到新数组中,而不是就地修改它。

关于c - 测试用例在特定行失败。手动工作正常 - C(大海捞针),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48364314/

32 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com