在C语言中向数组添加字符串(指针)

3
大家好,下面是一些代码,它初始化了一个由4个元素组成的数组,但有50个元素的空间。
现在我想手动向数组中添加一些元素,但是我做不到,请问有人能帮助我吗?例如,在这里,我想将"Sander"添加到第5个元素。
#include <stdio.h>

int main()
{
    int i;

char *arr[50] = {"C","C++","Java","VBA"};
char *(*ptr)[50] = &arr;

(*ptr)[5]="Sander";
for(i=0;i<5;i++)
    printf("String %d : %s\n",i+1,(*ptr)[i]);

return 0;
}

非常感谢。

哦,我真是太蠢了 :p 谢谢 - Sandeerius
我还有一个问题,如何获取使用的索引的长度?我已经尝试使用 sizeof 了,但那不正确。 - Sandeerius
好的,我会翻译 :) - Sandeerius
@Sandeerius 所有未初始化的元素都将包含“0”,因此您可以循环遍历数组,直到找到“0”,并在此过程中递增计数器。 - Barmar
我是这样解决的 for ( i = 0; i<50 && ptr[i]; i++ ),对我很有效 :) - Sandeerius
显示剩余2条评论
1个回答

8
看来您是想表达以下意思:
#include <stdio.h>

int main( void )
{
    int i;

    char *arr[50] = {"C","C++","Java","VBA"};
    char **ptr = arr;

    ptr[4] = "Sander";

    for ( i = 0; i < 5; i++ )
        printf("String %d : %s\n", i+1, ptr[i] );

    return 0;
}

或者以下内容:
#include <stdio.h>

int main( void )
{
    int i;

    char *arr[50] = {"C","C++","Java","VBA"};
    char * ( *ptr )[50] = &arr;

    ( *ptr )[4] = "Sander";

    for ( i = 0; i < 5; i++ )
        printf("String %d : %s\n", i+1, ( *ptr )[i] );

    return 0;
}

在这两种情况下,输出结果将是相同的。
String 1 : C
String 2 : C++
String 3 : Java
String 4 : VBA
String 5 : Sander

其他45个内存槽发生了什么?它们是否被分配(堆栈中是否存在这样的东西)? - aerijman
2
@aerijman 这个数组是在栈中分配的,它是一个指向具有静态存储期的字符串字面量的指针数组。那些没有被显式初始化的数组元素会被隐式地设置为NULL。 - Vlad from Moscow
那么 NULL 元素不占用内存空间吗? - aerijman
1
@aerijman 数组有50个元素,占据了堆栈中的一段内存空间。该内存空间的大小等于50 * sizeof( char * )。只有前4个元素被初始化为字符串字面量的地址,而其他元素则被初始化为零。 - Vlad from Moscow
给定 char *arr[] = {"C","C++","Java","VBA"};arr[4] = "Sander"; 有什么问题? - aerijman
@aerijman提问者不知道如何使用指针来完成相同的操作。 - Vlad from Moscow

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接