如何计算str型数组的大小?

时间:2019-01-07 03:12:00

标签: c

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

我尝试使用sizeof()函数,但由于我不知道每个str的大小,因此无法正常运行。我还尝试使用一种发现的技术:

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

我收到的不是“大小”,而是“节目接收信号SIGSEGV”

1 个答案:

答案 0 :(得分:4)

请记住,C中的双引号字符串文字(以及与此相关的所有数组)通常起 pointers 的作用(对于字符串文字,具体地说,它们起着char*的作用)。在这种情况下,您已经创建了一个指向char s数组的指针数组;最外层数组的大小是指针的大小乘以元素数。 (所有字符串本身都存储在其他位置。)

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

不过,对于SIGSEGVprintf将字符串(即指针)作为其第一个参数。当您给它一个数字时,它会尝试将其用作指针,首先运行到它不应该访问的某些内存中,然后操作系统会使用SIGSEGV将其杀死。打印数字的正确方法类似于printf("%d", my_int)