gpt4 book ai didi

c - 从用户那里获取一个字符串作为单个命令行参数,标记并显示它

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

将来自用户的字符串作为单个命令行参数。将其标记化并存储在适当的数据结构中,然后显示。

我试过这段代码,但它给我一个段错误。我找不到它在哪里。

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


#define delim " "

int main(int argc, char *argv[])
{

if(argc!=2)
{
printf("\nPlease enter only one argument as a single line string.\n");
exit (-1);
}

char *tmp1=NULL;
int len=0;
int count=0;
int i=0;
len=strlen(argv[1]);
tmp1=(char *)malloc(sizeof(char)* (len)+1);

if(NULL==tmp1)
{
printf("Memory allocation failure single ptr.");
exit (-1);
}

strcpy(tmp1,argv[1]);
char *tok=NULL;
char **data=NULL;
tok=strtok(tmp1,delim);

while(NULL!=tok)
{
count++;
tok=strtok(NULL,delim);
}

strcpy(tmp1,argv[1]);

data=(char**)malloc(sizeof(char*)*count);
if(NULL==data)
{
printf("Memory allocation failure double ptr.");
exit (-1);
}


tok=strtok(tmp1,delim);
while (NULL!=tok)
{
int l=strlen(tok);
data[i]=(char *)malloc(sizeof(char)*l)+1);
if(NULL==data[i])
{
printf("Memory allocation failure ");
exit (-1);
}


strcpy(data[i],tok);
tok=strtok(NULL,delim);
i++;
}

for (i=0; i<count; i++)
{
printf("%s\t",data[i]);
}
for (i=0; i<count; i++)
{
free(data[i]);
data[i]=NULL;
}
data=NULL;

free(tmp1);
tmp1=NULL;
return 0;
}

我传递了“你好,这是字符串”,它导致了段错误。

最佳答案

根据我运行您的代码的理解,您想要输入一个字符串作为参数,然后解析并打印它,就这么简单吗?

由于行中的拼写错误,代码未编译:

data[i]=(char *)malloc(sizeof(char)*l)+1);

修复后:

data[i]=(char *)malloc(sizeof(char)*l+1);

代码的输出是,对于“你好,这是字符串”:

hello   this    is      string                                                                                                                           

...Program finished with exit code 0

如果您仍然遇到段错误,请发布更多信息

关于c - 从用户那里获取一个字符串作为单个命令行参数,标记并显示它,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57917768/

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