我当前正在创建一个函数,该函数需要将新的str元素追加到我并不真正知道其大小的现有数组中,因为每个str的大小都不相同。
我尝试使用sizeof()函数,但由于我不知道每个str的大小,因此无法正常运行。我还尝试使用一种发现的技术:
char* liste[]={"one","two","three","four","five"};
int size = *(&liste + 1) - liste;
printf(size);
我收到的不是“大小”,而是“节目接收信号SIGSEGV”
答案 0 :(得分:4)
请记住,C中的双引号字符串文字(以及与此相关的所有数组)通常起 pointers 的作用(对于字符串文字,具体地说,它们起着char*
的作用)。在这种情况下,您已经创建了一个指向char
s数组的指针数组;最外层数组的大小是指针的大小乘以元素数。 (所有字符串本身都存储在其他位置。)
如果要获取元素数量并且在编译时就知道,则可以使用sizeof(liste)/sizeof(liste[0])
。如果在编译时未知,则必须添加其他跟踪方式,例如末尾为NULL或保存大小的单独变量。 (带双引号的字符串使用第一个选项:"hello"
大致等效于['h', 'e', 'l', 'l', 'o', 0]
。)
不过,对于SIGSEGV
:printf
将字符串(即指针)作为其第一个参数。当您给它一个数字时,它会尝试将其用作指针,首先运行到它不应该访问的某些内存中,然后操作系统会使用SIGSEGV
将其杀死。打印数字的正确方法类似于printf("%d", my_int)
。