char
配列は、宣言時に指定するサイズと、その内容に応じた長さを持つという意味で、特別なものであることを忘れないでください。配列のサイズは、配列に割り当てられているメモリの量です。文字列の長さは、終了するnull()の前の文字数'\0'
です。
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)
、常にcharへのポインタのサイズが返されます。文字列の長さを知りたい場合は、文字列が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'
}