我正在使用sprintf
进行测试,将int
转换为string
/ char
并注意到一些事情:
string
时 char *str = "anything";
无论我在其中写什么,sizeof
总是返回8字节的值。
但据我所知,char
通常是1字节的大小,那么为什么字符串/数组中的字符数不会改变它的大小呢?
如果我写
char str[15];
我得到15个字节的大小,所以如果我输入
,为什么我的大小不会达到15个字节char *str = "11111111111111\0"
但大小为8个字节?
char str[] = {"67"}
sizeof
返回3字节的值,这是有道理的,因为它是6,7和\ 0。
然后我写这个
int aInt = 368;
sprintf(str, "%d", aInt);
将int aInt 368
转换为字符串并将该字符串写入str
。
这些是char
然后,因此,sizeof
应返回4字节的值,计数为\ 0 in。
但它仍然会返回1,即使我写了3个字符。
有人可以向我解释一下吗?
这是我用来测试这段代码的代码:
#include <stdio.h>
int main(int argc, char *arfv[])
{
int aInt = 368;
printf("value of aInt: %d\n", aInt);
char str[15];
//Other ways of creating a string/array which were tested:
//char *str = "anything";
//char str[] = {"67"};
//printf("value of str before: %s\n", str); //value of str before converting
printf("size of str before: %ld\n", sizeof(str)); //size of str before converting
sprintf(str, "%d", aInt); //convert aInt into a string
printf("value of str after: %s\n", str); //value of str after converting
printf("size of str after: %ld\n", sizeof(str)); //size of str after converting
return 0;
}
答案 0 :(得分:7)
char*
只是指向某个内存的指针,其大小与架构上的指针无关(8个字节表示64位架构,4个字节表示32位)。 / p>
由于指针没有传达有关它们指向的分配大小的信息,sizeof
将不会评估分配的大小,它只会告诉你指针的大小是多少。此外,请注意sizeof
是编译时构造;它的值在编译时完全评估。
char *ptr = "1234567890";
char str[10] = "12345";
int numbers[10];
sizeof(ptr)
评估指针的大小。该值通常为4(32位)或8(64位)。sizeof(*ptr)
评估char
的大小。 (1)sizeof(str)
评估数组的大小。 (它的大小为10个字节,即使只分配了6个字节。)sizeof(numbers)
将评估为sizeof(int) * 10
。答案 1 :(得分:2)
sizeof
为您提供存储给定类型值所需的字节数。对于char *
,这通常是4或8个字节。 char *
可以存储内存地址,您可能会找到char
。这个地址有多少char
个?如果这些char
编码一个C字符串,那么您可以使用strlen
来获取字符串的长度。