r*****8 发帖数: 2560 | 1 问题1. 为什么 sizeof(test))总是显示8?
问题2. *test 的大小从12变到36字母没问题吗?
#include
#include
void main(void)
{
char *test = "abcdefghijk";
printf("Size of test is %li \n", sizeof(test));
// 结果显示:8,应该是12啊,怎么会是8?
printf("The string test is %s \n", test);
// 结果打印出 "abcdefghijk"
test = "abcdefghijk abcdefghijk abcdefghijk";
printf("Size of test is %li \n", sizeof(test));
// 结果显示还是8,应该是36啊,怎么会是8?
printf("The string test is %s \n", test);
// 结果打印出"abcdefghijk abcdefghijk abcdefghijk"
return 0;
}
谢谢! |
b*******s 发帖数: 5216 | 2 test is a 64-bit pointer |
d****i 发帖数: 4809 | 3 When you use the following:
char *test = "abcdefghijk";
test is a pointer to a constant string literal, so it is of pointer type. I
guess you are on a 64-bit machine, therefore you got 8 bytes.
Change it to
char test[] = "abcdefghijk";
And then test again, you'll see difference.
【在 r*****8 的大作中提到】 : 问题1. 为什么 sizeof(test))总是显示8? : 问题2. *test 的大小从12变到36字母没问题吗? : #include : #include : void main(void) : { : char *test = "abcdefghijk"; : printf("Size of test is %li \n", sizeof(test)); : // 结果显示:8,应该是12啊,怎么会是8? : printf("The string test is %s \n", test);
|
r*****8 发帖数: 2560 | 4 “I guess you are on a 64-bit machine, ”
对啊,你太牛了。我的运行平台是一个64-bit的PC机,装了Virtual Box,然后装了乌
邦土。
“therefore you got 8 bytes.”
8 bytes 怎么能装得下那么多字母呢?还不出错。
I
【在 d****i 的大作中提到】 : When you use the following: : char *test = "abcdefghijk"; : test is a pointer to a constant string literal, so it is of pointer type. I : guess you are on a 64-bit machine, therefore you got 8 bytes. : Change it to : char test[] = "abcdefghijk"; : And then test again, you'll see difference.
|
r*****8 发帖数: 2560 | 5 64-bit 就是 8 bytes.
8 bytes 怎么能装得下那么多字母呢?还不出错。
【在 b*******s 的大作中提到】 : test is a 64-bit pointer
|
r*****8 发帖数: 2560 | 6 搞清楚了一部分sizeof()如果是指一个Pointer,总是同一大小8。
那么如何知道char *test = "abcdefghij"; 里面总共有多少个字符呢? |
c******e 发帖数: 545 | 7 strlen
【在 r*****8 的大作中提到】 : 搞清楚了一部分sizeof()如果是指一个Pointer,总是同一大小8。 : 那么如何知道char *test = "abcdefghij"; 里面总共有多少个字符呢?
|
r*****8 发帖数: 2560 | 8 非常感谢!
【在 c******e 的大作中提到】 : strlen
|
S*A 发帖数: 7142 | 9 sizeof 返回的是 变量类型的大小。
指针变量大小在同一个platform 就是native int 的大小。
64 位机器是 8.
你问题的是指针指向的 string 的大小,那个用 strlen。
【在 r*****8 的大作中提到】 : 搞清楚了一部分sizeof()如果是指一个Pointer,总是同一大小8。 : 那么如何知道char *test = "abcdefghij"; 里面总共有多少个字符呢?
|
a*****g 发帖数: 19398 | 10 对头
【在 b*******s 的大作中提到】 : test is a 64-bit pointer
|