いくつかのディレクトリ名へのパスを解決するために、次のプログラムを作成しました
#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
PROBLEMというラベルの付いた行にコメントすると
Input: a/b/c
Output: Some garbage value
誰かがこの奇妙な行動の理由を私に説明できますか?
s
注:これはスタックに割り当てられた変数であり、関数内に存在しなくなったことに気づきましたが、main()
使用するとプログラムが機能するのはなぜprintf()
ですか?