<分区>
char* path = (char*)malloc(size); // path = "abc/def/ghi\0"
char** savearr1 // no malloc
char* savearr2[100]; // no malloc
这种情况,我用strtok(savearr1 or savearr2, "/");
/* if I start this code1 */
while(...) // strtok loop
strtok(savearr1[i], "/")
/* if I start this code2 */
while(...) // strtok loop
strtok(savearr2[i], "/")
code1 while-loop 是段错误, code2 while-loop 成功完成
我有疑问为什么 code1 是段错误。 strtok 中的 char*[] 和 char** 行为是否不同?
这是代码,
int makeFile(const char* fname, FileType type){
char* path = (char*)malloc(strlen(fname)+1);
char* fnames[PATH_LEN];
memcpy(path, fname, strlen(fname));
path[strlen(fname)] = '\0';
int num = 0;
int ino;
fnames[num++] = strtok(path, "/");
while(fnames[num++] = strtok(NULL, "/"));
if(strcmp(fnames[0], "") == 0) return -1;
if(num == 2){
makeEntry(pFileSysInfo->rootInodeNum, fnames[0], type);
}
else{
ino = findEntry(pFileSysInfo->rootInodeNum, fnames[0]);
for(int i=1; i<num-2; i++)
ino = findEntry(ino, fnames[i]);
makeEntry(ino, fnames[num-2], type);
}
free(path);
}
我将 char* fnames[PATH_LEN] 更改为 char** fnames,在 fnames[num++] = strtok(path, "/") 中出现段错误; while(fnames[num++] = strtok(NULL, "/"));