gpt4 book ai didi

c - 将字符串解析为参数时出现额外的空字符串

转载 作者:行者123 更新时间:2023-12-01 23:44:55 24 4
gpt4 key购买 nike

我正在尝试使用我在网上找到的以下解析函数:

    void  parse(char *line, char **argv)
{
while (*line != '\0') { /* if not the end of line */
while (*line == ' ' || *line == '\t' || *line == '\n')
*line++ = '\0'; /* replace white spaces with 0 */
*argv++ = line; /* save the argument position */
while (*line != '\0' && *line != ' ' && *line != '\t' &&
*line != '\n')
line++; /* skip the argument until ... */
}
*argv = '\0'; /* mark the end of argument list */
}

这对我想做的事情(制作我自己的 char **argv)非常有用,但它有一个缺点。它在我的最后一个参数之后和我的 NULL 之前在我的 argv 中创建了一个额外的空字符串。你们中的任何人都可以看到我可以在哪里更改代码来解决这个问题吗?我试过使用 gdb 逐步完成,但我无法弄清楚。

示例:如果我的行只是"1"*argv =[1, , (null)]。我需要摆脱那个空字符串。

我试过直接更改空白区域,但那行不通。例如我试过:

   char **temp = args;
int count =0;
while(*temp != NULL){
*temp = *(temp +1);
count++;}
args[count] = NULL;

最佳答案

如果 line 指向的字符串,您提供的代码将在参数列表的末尾包含一个空字符串(不能很好地描述为“空 空格”)以空格结束。您可以通过阅读 line 来首先截断任何尾随空格(空格、制表符和/或换行符)来避免这种情况。以一种避免包含此类尾随空格的任何可能性的方式,或者通过始终强制空格并将倒数第二行更改为*--argv = '\0' .

虽然我在做这件事,但我观察到虽然'\0'实际上是一个完全有效的空指针表达式,但是它比宏NULL 更不清晰。 ,甚至,在这种情况下,普通 0 .

关于c - 将字符串解析为参数时出现额外的空字符串,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29837256/

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