我有一个字符串块,说“aaa \ 0bbbb \ 0ccccccc \ 0” 我想把它们变成一个字符串数组。 我尝试使用以下代码执行此操作:
void parsePath(char* pathString){
char *pathS = malloc(strlen(pathString));
strcpy(pathS, pathString);
printf(1,"33333\n");
pathCount = 0;
int i,charIndex;
printf(1,"44444\n");
for(i=0; i<strlen(pathString) ; i++){
if(pathS[i]=='\0')
{
char* ith = malloc(charIndex);
strcpy(ith,pathS+i-charIndex);
printf(1,"parsed string %s\n",ith);
exportPathList[pathCount] = ith;
pathCount++;
charIndex=0;
}
else{
charIndex++;
}
}
return;
}
exportPathList是前面代码中定义的全局变量 char * exportPathList [32]; 当使用该函数时,exportPathList [i]包含垃圾。 我做错了什么?
答案 0 :(得分:1)
首先,由于您的字符串由空字符'\0'
分隔,strlen
只会报告字符串的大小,直到第一个'\0'
。 strcpy
也将复制到第一个空字符。
此外,您无法知道输入字符串以此信息结尾的位置。您需要传入整个大小,或者,例如,使用双重空字符结束输入:
#include <stdio.h>
#include <string.h>
void parsePath(const char* pathString){
char buf[256]; // some limit
while (1) {
strcpy(buf, pathString);
pathString+=strlen(buf) + 1;
if (strlen(buf) == 0)
break;
printf("%s\n", buf);
}
}
int main()
{
const char *str = "aaa\0bbbb\0ccccccc\0\0";
parsePath(str);
return 0;
}
你需要一些realloc来实际创建数组。
答案 1 :(得分:1)
这个问题的答案:
处理类似的问题,你可以看看。
您需要知道有多少字符串或同意&#34;字符串结尾&#34;。最简单的是在末尾有一个空字符串:
aaa\0bbbb\0ccccccc\0\0
^^
P.S。这是家庭作业吗?
答案 2 :(得分:0)
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#define MAXSIZE 16
char* exportPathList[MAXSIZE] = {0};
size_t pathCount = 0;
void parsePath(char* pathString){
char *ptop, *pend;
ptop=pend=pathString;
while(*ptop){
while(*pend)++pend;
exportPathList[pathCount++]=strdup(ptop);
pend=ptop=pend+1;
}
}
int main(){
char textBlock[]= "aaa\0bbbb\0ccccccc\0";
//size_t size = sizeof(textBlock)/sizeof(char);
int i;
parsePath(textBlock);
for(i=0;i<pathCount;++i)
printf("%s\n", exportPathList[i]);
return 0;
}
答案 3 :(得分:0)
我实现的解决方案确实在字符串的末尾添加了两个'\ 0'并使用它来计算字符串的数量。
我的新实现(路径是字符串数):
void parsePath(char* pathString,int paths){
int i=0;
while (i<paths) {
exportPathList[i] = malloc(strlen(pathString)+1);
strcpy(exportPathList[i], pathString);
pathString+=strlen(pathString);
i++;
}
}
我要感谢所有贡献的人。