首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >C:在字符串数组中存储子字符串

C:在字符串数组中存储子字符串
EN

Stack Overflow用户
提问于 2015-03-22 20:32:36
回答 3查看 541关注 0票数 0

我有一个长字符串,我想获取它的特定子字符串,并将其存储到一个字符串数组中。我尝试在memcpy()中使用malloc(),但它似乎不起作用。我该怎么做呢?代码:

代码语言:javascript
运行
复制
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;
        }
    }
EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2015-03-22 21:17:18

代码语言:javascript
运行
复制
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
票数 1
EN

Stack Overflow用户

发布于 2015-03-22 21:16:05

一种解决方案是使用strtokstrncpyrealloc函数。例如:

代码语言:javascript
运行
复制
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;
}

这样,每当我们发现另一个:分隔字符串时,我们就会根据需要展开“字符串数组”。

(柯尔鲁)

票数 1
EN

Stack Overflow用户

发布于 2015-03-27 09:50:38

我建议你使用strtok或更好的strtok_r,像这样使用它们。

代码语言:javascript
运行
复制
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保持不变,可以在不妨碍重入的情况下完成任务。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/29199514

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档