我寫了下面的程序。如果我評論的線標記問題解決的路徑幾個目錄名奇怪的行爲
#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