【发布时间】:2015-07-17 16:40:44
【问题描述】:
struct stat buf;
lstat(path, &buf)
char *p;
p = strtok(ctime(&buf.st_mtime)," ");
int i = 0;
while (p != NULL)
{
printf ("%s\n",p);
p = strtok (NULL, " ");
}
上面的代码可以运行。
但是,我不明白为什么指针 p 能够被打印出来,因为它指向 strtok() 返回的第一个令牌。
当我尝试通过将其更改为 *p 并打印出来来代替它时,它只是返回了分段错误。不知道为什么会这样。
【问题讨论】:
-
因为
%s需要char*,而不是char。*p是char。使用%c格式说明符打印此字符。 -
你到底想在
p = strtok (NULL, " ");行中做什么? -
@Dariusz
strtok(NULL, " ");继续标记" "上的字符串(这不应该是' '吗?) -
@Baldrickk 是的,你是对的,strtok 存储了一个内部指针。没想到不安全。不过,第二个参数没问题。它用作字符列表。
-
在我看来,在
ctime()拥有的缓冲区上调用strtok()的形式非常糟糕。
标签: c pointers segmentation-fault printf strtok