下面的代码是将元素存储在数组中但不返回大小。 我怎样才能获得数组的大小?如果元素插入过程是错误的,那我怎样才能在c
中实现相同的东西 #include <stdio.h>
#include <string.h>
char *names[] = {};
int main ()
{
names[0] = "ashish1";
names[3] = "ashish";
printf("%s\n",names[0]);
printf("%d",sizeof(names));
return 0;
}
输出:
ashish1 0 它应该是 ashish1 2
我想将字符串追加到数组
答案 0 :(得分:2)
此代码在C中是非法的.Braced初始化列表必须至少包含一个初始化程序。如果这为您编译,则您正在利用编译器扩展。 (从内存中,gcc将其视为零大小的数组)。
要使代码正常工作,您必须使其足够大:
char const *names[4]; // no initializer required, globals default to zero-initialized
int main()
{
names[0] = "ashish1";
names[3] = "ashish";
printf("%s\n", names[0]);
printf("%zu\n", sizeof names / sizeof names[0]);
}
数组大小必须在声明数组时固定;你不能在C中增长命名数组。(你可以增长动态分配的数组)。
答案 1 :(得分:0)
您没有为指针数组分配大小,
names[0] = "ashish1";
in that time C compiler allocate memory to pointer so string starting address stored.
"ashish1" string stored on read only memory location.
if you stored any data first allocate size to *names.