我写了下面的程序。如果我评论的线标记问题解决的路径几个目录名奇怪的行为
#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()
程序工作?
如果我编译你的程序,我会在最下面的'while'行发出警告。最好先研究一下。 – 2012-04-22 08:24:38
@MrLister编译程序时,我没有收到任何警告。你指定的gcc编译器有哪些选项? – gibraltar 2012-04-22 08:26:46
着名的'-Wall' – 2012-04-22 08:27:07