【发布时间】:2013-11-15 03:41:45
【问题描述】:
我有一个非常简单的函数给我带来了一些问题。我要做的就是在从字符串更改子字符串后返回一个子字符串。但是当我运行代码时,我遇到了分段错误。我的代码发生了什么:
#include <stdio.h>
#include <string.h>
const char *new_name(char str[])
{
char * pch;
char * last="";
char * pch2;
static char name[80];
printf ("Splitting string \"%s\" into tokens:\n",str);
pch = strtok (str,"/");
while (pch != NULL)
{
last=pch;
pch = strtok (NULL, "/");
}
pch2 = strtok (last,".");
strcpy(name, pch2);
strcat(name, ".ppm");
return name;
}
int main()
{
printf("New name: %s",new_name("/home/test/segmentation/test.pgm"));
return 0;
}
编辑:我还有一个问题:我想使用这个函数的返回作为另一个函数的输入,但它接受 char 并且返回的值是 const char。如何进行转换?
【问题讨论】:
-
在这里使用 strtok 似乎有点过头了,使用一个简单的循环来查找最后一个 / 通过从末尾循环
char* ch; for (ch = str + strlen(str) - 1; ch != '/'; --ch);现在 ch 指向 '/',您现在还可以将任何内容传递给函数,因为您没有修改参数。
标签: c string segmentation-fault strtok