请记住,char
数组是特殊的,因为它们具有在声明它们时指定的size和取决于它们的内容的length 。数组的大小是分配给它的内存量。'\0'
字符串的长度是终止 null ( )之前的字符数。
some_func() {
int len = 20; // Size of the array
char chaine[len]; // Uninitialized array of size 20.
memset(chaine, '\0', sizeof(chaine)); // Init to all null chars, len = 0
strcpy(chaine, "WORDS"); // Copy a string, len = 5
char *chaine2 = function(chaine, sizeof(chaine));
printf("%s\n", chaine2);
free (chaine2);
}
当您将数组传递给函数时,它被视为指针。所以sizeof(str)
在函数内部总是会返回指针到字符的大小,而不是原始数组的大小。如果您想知道字符串有多长,请确保它以 null 结尾并strlen()
像这样使用:
char *function(char *str, int len) {
// Assume str = "WORDS", len = 20.
char *new_str = malloc(len); // Create a new string, size = 20
memset(new_str, '\0', len); // Initialize to nulls
memset(new_str, '*', strlen(str)); // Copy 5 '*' chars, len = 5
return new_str; // Pointer to 20 bytes of memory: 5 '*' and 15 '\0'
}