使用strlen()设置char数组长度会返回错误的大小

时间:2018-06-12 22:52:41

标签: c

我正在尝试创建一个新的c-string,其长度为传入的c-string。我将变量设置为旧字符串的长度,然后尝试设置一个具有该长度的新c字符串,但检查该长度返回1.为什么会发生这种情况?

//This function will return a pointer to a char array
char *encrypt(char plainText[], char code[]){
    int i = 0,j = 0;
    //length of plainText
    int len = strlen(plainText);
    printf("len %i\n",len); //8
    //I am declaring a pointer here
    char *x;
    //make a string for the cipherText
    char cipher[len];
    printf("cipher %lu\n",strlen(cipher)); //1
    return "Nothing";
}

1 个答案:

答案 0 :(得分:3)

数组cipher 未初始化。它的内容是不确定(并且看起来几乎是随机的)。它可能根本不包含字符串终结符,这意味着strlen将在搜索它时超出范围。在你的特定情况下,你似乎很“幸运”,你的数组中的第二个元素恰好是终结符。

您似乎忘记了char字符串实际上被称为 空终止 字节字符串 null-terminator 也需要空间。当然存在。

undefined behavior总共有很多机会。