我有一个长字符串,我想获取它的特定子字符串,并将其存储到一个字符串数组中。我尝试在memcpy()中使用malloc(),但它似乎不起作用。我该怎么做呢?代码:
for(i = 0; i < strlen(p); i++){
if(p[i] == ':'){
cnt++;
end = i - start;
list[i] = malloc(1000);
memcpy( list[i], &p[start], end );
list[i][end] = '\0';
//printf("%s\n", list[i]);
start = i + 1;
}
}
发布于 2015-03-22 21:17:18
int len = 0;
int start = 0;
int cnt = 0;
for( = 0; i < strlen(p); i++)
{
if(p[i] == ':')
{ // then, found delimeter
len = i - start+1;
list[cnt] = malloc(len);
memset( list[cnt],'\0', len );
memcpy( list[cnt], &p[start], len );
//printf("%s\n", list[i]);
start = i + 1;
cnt++;
} // end if
} // end for
发布于 2015-03-22 21:16:05
一种解决方案是使用strtok
、strncpy
、realloc
函数。例如:
int main(void){
char str[] = "asbd0:sdsd1:ssdwdwd2";
int tokens = 0;
int i = 0;
char **res = NULL;
char *token = strtok(str, ":");
for (tokens = 1; token; ++tokens) {
res = realloc(res, tokens *sizeof(*res));
res[tokens - 1] = malloc(strlen(token) + 1);
strncpy(res[tokens - 1], token, strlen(token) + 1);
token = strtok(NULL, ":");
}
for (i = 0; i<tokens-1; ++i){
puts(res[i]);
}
return 0;
}
这样,每当我们发现另一个:
分隔字符串时,我们就会根据需要展开“字符串数组”。
(柯尔鲁)
发布于 2015-03-27 09:50:38
我建议你使用strtok或更好的strtok_r,像这样使用它们。
char *str = "Hello you new guy";
char *temp;
temp = strtok(str," ");
while(temp!=NULL) {
printf("%s\n",temp);
temp = strtok(NULL," ");
}
小心!斯特托克是破坏性的。使用strtok_r代替:
就像strtok一样,这个函数将字符串拆分成几个令牌,可以通过对strtok_r的连续调用来访问。不同的是,关于下一个令牌的信息存储在第三个参数save_ptr指向的空间中,这是一个指向字符串指针的指针。使用新字符串的空指针调用strtok_r,并使调用之间的save_ptr保持不变,可以在不妨碍重入的情况下完成任务。
https://stackoverflow.com/questions/29199514
复制相似问题