垃圾值;奇怪的字符串strlen值

时间:2015-04-14 19:07:27

标签: c string strlen

我正在尝试编写一个函数,将一个字符串插入指定值的另一个字符串中。它向新字符串的末尾返回一些垃圾值,可能是因为由于某种原因,新字符串的strlen大于它应该的大小。 strlen(组合)应该等于s1 + s2但它没有。我不知道为什么它返回13而不是9作为长度。这是我的代码:

#include <stdio.h>
#include <string.h>

void insertString(char *string1, char *string2, int position) {
    int i, j = 0, k = 0, s1 = strlen(string1), s2 = strlen(string2);
    char combo[s1 + s2];

    for (i = 0; i < s1 + s2; i++) {
        combo[i] = i;
    }

    for (i = 0; i < s1 + s2; i++) {
        if (i < position) {
            combo[i] = string1[i];
            j++;
        }
        else if (i >= position && i < position + s2) {
            combo[i] = string2[k];
            k++;
        }
        else if (i >= position + s2) {
            combo[i] = string1[j];
            j++;
        }
    }
    for (i = 0; i < strlen(combo); i++){
        printf("%c", combo[i]);
    }

    printf ("\n comboLength = %lu\n", strlen(combo));
    printf ("s1 = %d\n", s1);
    printf ("s2 = %d\n", s2);
}


int main (void) {
    insertString("I pie", "like", 2);

    return 0;
}

编辑:添加了空字符。仍然在新字符串的右侧返回单个垃圾值几个空格,并且仍然不返回9作为正确的字符串长度。

#include <stdio.h>
#include <string.h>

void insertString(char *string1, char *string2, int position) {
    int i, j = 0, k = 0, s1 = strlen(string1), s2 = strlen(string2);
    char combo[s1 + s2];

    for (i = 0; i <= s1 + s2; i++) {
        combo[i] = i;
    }

    for (i = 0; i < s1 + s2; i++) {
        if (i == s1 + s2) {
            combo[i] = '\0';
        }
        else if (i < position) {
            combo[i] = string1[i];
            j++;
        }
        else if (i >= position && i < position + s2) {
            combo[i] = string2[k];
            k++;
        }
        else if (i >= position + s2) {
            combo[i] = string1[j];
            j++;
        }
    }
    for (i = 0; i < strlen(combo); i++){
        printf("%c", combo[i]);
    }

    printf ("\n comboLength = %lu\n", strlen(combo));
    printf ("s1 = %d\n", s1);
    printf ("s2 = %d\n", s2);
}


int main (void) {
    insertString("I pie", "like", 2);

    return 0;
}

1 个答案:

答案 0 :(得分:3)

你的组合字符串中缺少终止\ 0。 strlen()返回不包括终止空字节的长度。