我编写了以下程序来解析多个目录名称的路径
#include <stdio.h>
#include <string.h>
#include <stdlib.h>
char *
tokenizer(char *path, char **name){
char s[300];
char *buffer;
memcpy(s, path, strlen(path)+1);
printf("%s\n",s); // PROBLEM
int i=0;
while(s[i] == '/'){
i++;
}
if (i == strlen(path)){
return NULL;
}
*name = strtok_r(s, "/", &buffer);
return buffer;
}
int main(void){
char str[300];
char *token, *p;
scanf("%s",str);
p = tokenizer(str, &token);
if (p != NULL)
printf("%s\n",token);
else
printf("Nothing left\n");
while((p=tokenizer(p, &token)) != NULL){
printf("%s\n",token);
}
}
上述程序的输出
Input: a/b/c
Output: a/b/c
a/b/c
a
b/c
b
c
c
如果我评论标有问题的行
Input: a/b/c
Output: Some garbage value
有人可以解释一下这种奇怪行为的原因吗?
注意:我已经意识到这s
是一个堆栈分配的变量,它不再存在于函数中main()
,但是为什么我使用时程序可以工作printf()
?