从用户那里获取一个字符串作为单个命令行参数。令牌化并将其存储在适当的数据结构中,然后显示它。
我尝试了这段代码,但它给了我分段错误。我无法找到它在哪里。
#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;
}
我传递了“你好,这是字符串”,它导致分段错误。
答案 0 :(得分: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
如果您仍然存在细分错误,请发布更多信息