tek*_*agi -1 c string sizeof string-literals
#include "usefunc.h" //don't worry about this -> lib I wrote
int main()
{
int i;
string given[4000], longest = "a"; //declared new typdef. equivalent to 2D char array
given[0] = "a";
printf("Please enter words separated by RETs...\n");
for (i = 1; i < 4000 && !StringEqual(given[i-1], "end"); i++)
{
given[i] = GetLine();
/*
if (sizeof(given[i]) > sizeof(longest))
{
longest = given[i];
}
*/
printf("%lu\n", sizeof(given[i])); //this ALWAYS RETURNS EIGHT!!!
}
printf("%s", longest);
}
Run Code Online (Sandbox Code Playgroud)
它为什么总是返回8 ???
小智 13
stringC中没有数据类型.这是C++吗?或者是stringtypedef?
假设string是一个typedef char *,你可能想要的是strlen,不是sizeof.你得到的8 sizeof实际上是指针的大小(到字符串中的第一个字符).
这是字符数组本身和指向该数组开始位置的指针之间的常见错误。
例如 C 风格的字符串文字:
char hello[14] = "Hello, World!";
Run Code Online (Sandbox Code Playgroud)
为 14 个字节(13 个字节用于消息,1 个字节用于空终止字符)。您可以使用它sizeof()来确定原始 C 样式字符串的大小。
但是,如果我们创建一个指向该字符串的指针:
char* strptr = hello;
Run Code Online (Sandbox Code Playgroud)
并尝试使用 查找它的大小sizeof(),它只会返回系统上数据指针的大小。
因此,换句话说,当您尝试从字符串库中获取字符串的大小时,您实际上只是获取了指向该字符串开头的指针的大小。您需要使用的是函数strlen(),它返回字符串的字符大小:
sizeof(strptr); //usually 4 or 8 bytes
strlen(strptr); //going to be 14 bytes
Run Code Online (Sandbox Code Playgroud)
希望这能解决问题!
| 归档时间: |
|
| 查看次数: |
6931 次 |
| 最近记录: |