[英]Setting char array length with strlen() returns wrong size
我正在嘗試使用傳入的c字符串的長度創建一個新的c字符串。 我將變量設置為舊字符串的長度,然后嘗試設置具有該長度的新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";
}
數組cipher
未初始化 。 它的內容是不確定的 (並且似乎幾乎是隨機的)。 它可能根本不包含字符串終止符,這意味着strlen
在搜索時會超出范圍。 在您的特定情況下,您似乎很幸運,數組中的第二個元素恰好是終止符。
而且您似乎忘記了char
字符串實際上稱為以null終止的 字節字符串 。 空終止符也需要空間。 並且當然存在。
所有的機會都是不確定的行為 。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.