gpt4 book ai didi

c - 如何覆盖不直观的代码块?

转载 作者:太空宇宙 更新时间:2023-11-04 04:58:09 25 4
gpt4 key购买 nike

出于某种原因,我很难尝试涵盖下面的代码块。此代码摘自 UNIX uniq 命令。我正在尝试编写测试用例以覆盖所有 block ,但似乎无法到达此 block :

if (nfiles == 2)
{
// Generic error routine
}

在上下文中:

int main (int argc, char **argv)
{
int optc = 0;
bool posixly_correct = (getenv ("POSIXLY_CORRECT") != NULL);
int nfiles = 0;
char const *file[2];

file[0] = file[1] = "-";
program_name = argv[0];

skip_chars = 0;
skip_fields = 0;
check_chars = SIZE_MAX;

for (;;)
{
/* Parse an operand with leading "+" as a file after "--" was
seen; or if pedantic and a file was seen; or if not
obsolete. */

if (optc == -1 || (posixly_correct && nfiles != 0) || ((optc = getopt_long (argc, argv, "-0123456789Dcdf:is:uw:", longopts, NULL)) == -1))
{
if (optind == argc)
break;
if (nfiles == 2)
{
// Handle errors
}
file[nfiles++] = argv[optind++];
}
else switch (optc)
{
case 1:
{
unsigned long int size;
if (optarg[0] == '+' && posix2_version () < 200112 && xstrtoul (optarg, NULL, 10, &size, "") == LONGINT_OK && size <= SIZE_MAX)
skip_chars = size;
else if (nfiles == 2)
{
// Handle error
}
else
file[nfiles++] = optarg;
}
break;
}
}
}

如有任何帮助,我们将不胜感激。谢谢。

最佳答案

当在命令行上提供超过 2 个文件时,似乎可以达到此目的。在这种情况下,在第二个文件的名称存储在 file[1] 中之后,nfiles 将达到值 2。当代码检查 nfiles == 2 第三次 时,值已经是 2,将执行错误处理。

有两个 if 语句有问题。只有在 longopts 中使用带有 val == 1 的选项才能达到 switch case 中的“1”。

关于c - 如何覆盖不直观的代码块?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2631610/

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