首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >C- Sub字符串(从POS到POS)

C- Sub字符串(从POS到POS)
EN

Stack Overflow用户
提问于 2011-12-26 06:28:28
回答 5查看 1.7K关注 0票数 0

我有一个长度为32的字符数组,并希望从中提取某些字符。例如

111111000000000000000000111111 <32个字符

我想要0-6的字符,应该是111111

或者甚至取26-31个字符,它应该是111111

代码语言:javascript
复制
char check_type[32];

上面是我如何声明的。

我希望能够做的是定义一个函数或使用一个函数,它接受开始位置和结束字符。

我已经看过很多方法,比如使用strncpystrcpy,但还没有找到任何方法。

EN

回答 5

Stack Overflow用户

回答已采纳

发布于 2011-12-26 06:36:18

使用memcpy

代码语言:javascript
复制
// Stores s[from..to) in sub.
// The caller is responsible for memory allocation.
void extract_substr(char const *s, char *sub, size_t from, size_t to)
{
    size_t sublen = to - from;
    memcpy(sub, s + from, sublen);
    sub[sublen] = '\0';
}
票数 0
EN

Stack Overflow用户

发布于 2011-12-26 06:43:58

我会简单地包装strncpy

代码语言:javascript
复制
#include <stdio.h>
#include <stdlib.h>
#include <string.h>

/* Creates a sub-string of range [start, end], return value must be freed */
char *substr(char *src, size_t start, size_t end)
{
   size_t sub_len = end - start + 1;
   char * new_str = malloc(sub_len + 1); /* TODO: check malloc's return value */

   strncpy(new_str, src, sub_len);
   new_str[sub_len] = '\0'; /* new_str is of size sub_len + 1 */

   return new_str;
}

int main(void)
{
   char str[] = "111111000000000000000000111111";
   char *sub_str = substr(str, 0, 5);

   puts(sub_str);

   free(sub_str);
   return EXIT_SUCCESS;
}

输出:

代码语言:javascript
复制
111111
票数 1
EN

Stack Overflow用户

发布于 2011-12-26 06:34:32

示例:

代码语言:javascript
复制
char *substr(char *source, int startpos, int endpos)
{
    int len = endpos - startpos + 2; // must account for final 0
    int i = 0;

    char *src, *dst;
    char *ret = calloc(len, sizeof(char));

    if (!ret)
        return ret;

    src = source + startpos;
    dst = ret;

    while (i++ < len)
        *dst++ = *src++;

    *dst = 0;
    return ret;
}

当然,当您不再需要返回代码时,请将其释放。你会注意到这个函数不会检查endposstartpos的有效性。

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

https://stackoverflow.com/questions/8631897

复制
相关文章

相似问题

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