gpt4 book ai didi

c - 使用通配符 (*) 作为第一个输入时,程序出现段错误

转载 作者:行者123 更新时间:2023-12-01 20:06:10 26 4
gpt4 key购买 nike

/*Input string argument can be up to 3 integer numbers, 
separated by spaces. A wild card value, represented by a *
character can replace any one of the integer numbers.*/

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

void parse(char *data);

int program = 0, version = 0, process = 0;

unsigned char flags = 0;

#define GOT_PROG 0x01

#define GOT_VERS 0x02

#define GOT_PROC 0x04


int main()

{
char data[] = " * 10 7 ";
parse(data);
system("PAUSE");
return 0;
}


void parse(char *data)
{

char *tmp = NULL;
/* advance past whitespace */
while(isspace((int)*data)) data++;
if(*data != '*')
{
program = strtoul(data,&tmp,0);
flags|=GOT_PROG;
printf("%d 11\n",program );
}

if(*tmp == '\0') return;
data=++tmp;

if(*data != '*')
{
version = strtoul(data,&tmp,0);
flags|=GOT_VERS;
printf("%d 22\n",version);
}
else
{
tmp++;
}

if(*tmp == '\0') return;
data=++tmp;

if(*data != '*')
{
process = strtoul(data,&tmp,0);
flags|=GOT_PROC;
printf("%d 33\n",process);
}
}

当我的输入是 3 个整数时,它运行良好。当我的输入是两个整数和一个 * 时,它运行正常,除非我用 * 替换第一个整数,不知道我哪里出错了!有什么建议吗?

最佳答案

此 block 中的逻辑错误:

char *tmp = NULL;
/* advance past whitespace */
while(isspace((int)*data)) data++;

// If *data == '*', you are skipping the code inside the if block.
// tmp continues to be NULL.
if(*data != '*')
{
program = strtoul(data,&tmp,0);
flags|=GOT_PROG;
printf("%d 11\n",program );
}

// Now you are dereferencing a NULL pointer
// and then setting the value of data to 'NULL + 1'.

if(*tmp == '\0') return;
data=++tmp;

我没有遵循您函数的整个逻辑,但您必须添加处理 *data == '*' 情况的代码。

关于c - 使用通配符 (*) 作为第一个输入时,程序出现段错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29960992/

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