gpt4 book ai didi

c - 我如何计算 str 类型数组的大小?

转载 作者:太空宇宙 更新时间:2023-11-04 06:12:07 26 4
gpt4 key购买 nike

我目前正在创建一个函数,该函数需要将新的 str 元素附加到一个我真的不知道其大小的现有数组,因为每个 str 的大小都不相同。

我尝试使用 sizeof() 函数,但由于我不知道每个 str 的大小,所以我看不到它起作用。我还尝试使用我发现的一种技术:

char* liste[]={"one","two","three","four","five"};
int size = *(&liste + 1) - liste;
printf(size);

我得到的不是大小,而是“程序接收信号 SIGSEGV”

最佳答案

请记住,C 语言中的双引号字符串文字——以及与此相关的所有数组——通常表现得像指针(对于字符串文字,具体而言,它们表现得像char*秒)。在本例中,您创建了一个指向 char 数组的指针数组;最外层数组的大小是指针的大小乘以元素的数量。 (所有字符串本身都存储在其他地方。)

如果您想获取元素的数量,并且在编译时已知,您可以使用sizeof(liste)/sizeof(liste[0]) .如果在编译时不知道,则必须添加一些其他方式来跟踪它,例如末尾的 NULL 或保存大小的单独变量。 (双引号字符串使用第一个选项:"hello" 大致等同于 ['h', 'e', 'l', 'l', 'o', 0] 。)

SIGSEGV 而言,尽管如此:printf 将字符串(即指针)作为其第一个参数。当您给它一个数字时,它会尝试将其用作指针,首先运行到它不应该访问的内存中,然后操作系统使用 SIGSEGV 将其终止。打印数字的正确方法类似于 printf("%d", my_int)

关于c - 我如何计算 str 类型数组的大小?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54068145/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com