在C中切片和复制字符串

时间:2016-09-21 00:01:46

标签: c string pointers slice

我正在尝试切割一个字符串并复制这个新的切片部分。

    char* makeWord(char *c, int j, int i){

    char *s;
    s = malloc(sizeof(char)*i-j)
    int k;
    for (k = 0; k < i - j; k++){
        s[k] = c[j+k];
    }

    printf("%s ", s);

    return s;
}

我正在尝试返回一个复制原始字符串相关部分的指针。

最后是打印奇怪的符号。

示例:

c[] = "hello darkness my old friend" 
makeWord(c, 0, 5); makeWord(c, 6,14); makeWord(c, 15, 17); makeWord(c, 18, 21);
  

生成:   你好darknessmt_'3 myP老朋友P

谢谢,抱歉新手问题。

2 个答案:

答案 0 :(得分:1)

C中的有效字符串需要空终止符。

您必须malloc()一个额外的字节来存储它,并在最后一个字符后用\0关闭字符串。

答案 1 :(得分:0)

  1. 如果需要分配一个字符串缓冲区来保存n个字符,则需要n+1个字符,另外一个用于终止空字符'\0'。还记得你必须自己设置终结器。

  2. sizeof(char)始终由标准定义。

  3. 试试这个:

    char* makeWord(char *c, int start, int end) {
    
        char *s = malloc(end - start + 1);
        if (!s) return NULL;
        int k;
        for (k = 0; k < end-start; k++){
            s[k] = c[start+k];
        }
        s[k] = '\0';
    
        printf("%s ", s);
    
        return s;
    }