正如标题所暗示的,我的问题是如何获得字符串的大小C.sizeof如果我在没有malloc它的函数中声明它(字符串),那么使用它是否合适?或者,如果我已将其声明为指针?如果我用它初始化malloc怎么办?我想做一个详尽的回复.
nmi*_*lov 42
你可以使用strlen.大小由终止空字符决定,因此传递的字符串应该是有效的.
如果你想得到内存缓冲区的大小,它包含你的字符串,你有指向它的指针:
sizeof来获取其大小.如果您对动态和静态数组之间的区别感到困惑,请检查此项.
Duk*_*ing 13
使用strlen获得的长度空终止字符串.
sizeof返回数组的长度而不是字符串.如果它是一个指针(char *s),而不是一个数组(char s[]),它将无法工作,因为它将返回指针的大小(通常在32位系统上为4个字节).我相信一个数组将作为指针传递或返回,因此您将失去sizeof用于检查数组大小的能力.
因此,只有当字符串跨越整个阵列(例如char s[] = "stuff"),将使用sizeof一个静态定义的数组返回你想要什么(会更快,因为它不会需要遍历找到空终止符)(如果最后一个字符是一个空终止符,你需要减去1).如果它没有跨越整个数组,它将不会返回您想要的内容.
所有这一切的替代方案实际上是存储字符串的大小.
hyd*_*yde 10
虽然sizeof此特定字符串类型的作品:
char str[] = "content";
int charcount = sizeof str - 1; // -1 to exclude terminating '\0'
Run Code Online (Sandbox Code Playgroud)
如果str是指针(sizeof返回指针的大小,通常是4或8)或具有指定长度的数组(sizeof将返回匹配指定长度的字节数,对于char类型相同),它不起作用.
只是用strlen().
小智 5
如果你使用sizeof()then a char *strandchar str[]将会返回不同的答案。char str[]将返回字符串的长度(包括字符串终止符),同时char *str将返回指针的大小(因编译器而异)。
| 归档时间: |
|
| 查看次数: |
179022 次 |
| 最近记录: |