作者热门文章
- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我想将输入字符串(路径)解析到数组中。
例如,如果输入是
cd("C/Hra/Halo 4/Hra");
数组应包含 {"C","Hra","Halo 4","Hra"}
,但它包含 {"C","Hra","Halo 4、“HraC”}
。我的 friend 建议我为每个字符串添加 "\0"
,但这不起作用。
有人可以建议我如何修复它吗?
我的代码:
#include<stdio.h>
#include<stdlib.h>
#include <string.h>
void cd(char* path){
printf("Path %s \n",path);
int count = 0;
int i = 0;
int length = (int)strlen(path);
for(i;i<length;i++){
if(path[i]=='/')
count ++;
}
char foldersName[count][255];
char str[strlen(path)];
strcpy(str,path);
char * pch;
pch = strtok (str,"/");
count = 0;
while (pch != NULL)
{
strcpy(foldersName[count],pch);
strcat(foldersName[count],"\0");
pch = strtok (NULL, "/");
count ++;
}
printf("----------------Tokens-----------\n");
for(i =0;i<count;i++){
printf("%s \n",foldersName[i]);
}
}
int main(int argc, char *argv[])
{
cd("C/Hra/Halo 4/Hra");
}
最佳答案
str
没有空字节的空间。
改变
char str[strlen(path)];
至
char str[strlen(path)+1];
同样,charfoldersName[count][255];
也需要更改大小:charfoldersName[count+1][255];
。通过这种方式,您计算 /
时,最终可能会得到远远大于所需值的 count
值。例如,路径可以以尾随 /
(/usr/bin/
) 结尾,路径中可以有多个连续的 /
( /usr//bin//lib//
) 等。当您在 /
上标记字符串时,同样可能会出现问题。
strtok()
返回一个以空字节结尾的字符串。因此,您不需要执行以下操作:strcat(foldersName[count],"\0");
。
您的程序还包含其他几个小问题/限制:
size_t
来存储strlen()
的返回值。 strtok()
会修改其输入(这就是为什么您必须复制路径
的原因)。 foldersName[count][255];
分配 variable length array (VLA)。如果 path
非常长(包含太多 /
),则分配可能会失败,并且不易检测到。 关于c - 如何在C中解析数组,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41470864/
我是一名优秀的程序员,十分优秀!