我正在尝试创建一个新的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";
}
答案 0 :(得分:3)
数组cipher
未初始化。它的内容是不确定(并且看起来几乎是随机的)。它可能根本不包含字符串终结符,这意味着strlen
将在搜索它时超出范围。在你的特定情况下,你似乎很“幸运”,你的数组中的第二个元素恰好是终结符。
您似乎忘记了char
字符串实际上被称为 空终止 字节字符串。 null-terminator 也需要空间。当然存在。
undefined behavior总共有很多机会。