如何在C a a中删除字符串数组

u3r8eeie  于 2023-02-07  发布在  其他
关注(0)|答案(2)|浏览(130)

我想知道如何从结构中删除字符串数组。
例如,我有一个结构和一个数组定义如下:

struct dataofcall {
    char day[25];
    char country[25];
    char startofthecall[6];
    char endofthecall[6];
};

dataofcall call[MAX];

然后,我要求用户输入他想要输入的呼叫数:例如:3.
然后使用for循环,用户输入关于123调用的信息,如下所示:

Monday Luxembourg 22:12 22:15
Tuesday Germany 12:21 14:16
Tuesday France 09:08 23:23

call[0]将如下所示:

call[0].day[25] = "Monday";
call[0].country[25] = "Luxembourg";
call[0].startofthecall[6] = "22:12";
call[0].endofthecall[6] = "22:15";

call [1]将类似于:

call[1].day[25] = "Germany";

等等。
因此,现在我需要从call中删除信息,例如231以及其他调用(如果有)将保持不变。
我就是不明白怎么删除,也不知道怎么输入调用信息什么的,就想求一下算法或者小循环,帮我从struct数组中删除一个字符串。
我试着这么做:

strcpy(call[0].country, "Data is deleted.");

但它看起来有点不正确,好像它应该是更好的方式来做,我找不到。

at0kjp5o

at0kjp5o1#

您不能删除(例如释放内存),但可以执行类似以下操作
呼叫[0]。国家[0] = '\0';
这使得字符串处理函数将call[0].country视为空字符串,因为第一个字符现在是字符串结束符\0。

erhoui1w

erhoui1w2#

如果数组声明为自动或静态存储持续时间:

dataofcall call[MAX];

那就没办法删除了。
当数组到达声明它的块的右大括号时,数组将停止存在(在自动存储持续时间的情况下)。但是,静态存储持续时间在程序的生命周期内存在,不会超出范围。
如果您改为在堆上动态分配内存,如下所示:

struct dataofcall **call = malloc (MAX * sizeof (struct dataofcall);

然后可以通过调用free()删除(或释放)从堆中分配的内存。

free (call);

相关问题