【问题标题】:How do you clear a vector of strings in C?如何清除 C 中的字符串向量?
【发布时间】:2018-10-30 13:50:13
【问题描述】:

使用全局变量,例如:

params_vector[100][100] = {};

是否可以“重置”或“清除”该数组中的值,使其与初始化时相同? char *arg[] 有很多例子(arg[i] = NULL 有效),但没有一个像这样的“矩阵”。

【问题讨论】:

  • 它不是字符串的向量。它是数组的数组。
  • 谢谢!!!我不确定是哪一个。

标签: c arrays pointers matrix


【解决方案1】:

如果这是一个char的多维数组,你可以简单地通过调用“重置”它

#include <string.h>

memset(params_vector, 0, sizeof params_vector);

如果您只需要将每个字符串的第一个字节设置为0,使用for循环可能会更有效。

【讨论】:

  • 我在第一个参数和 sizeof 内部都使用了带有 params_vector[i] 的 for。我不知道它也会起作用。非常感谢!
【解决方案2】:

假设这是一个由char 组成的多维数组,例如

char params_vector[N][M];

对于 N 和 M 的某些值 - 你不需要需要memset()整个东西到'\0';将每个字符串的第一个字符设置为'\0'就足够了:

for(size_t i = 0; i < N; i++) {
    params_vector[i][0] = '\0';
}

但是,如果N 很小,则此优化可能不值得,并且

memset(params_vector, '\0', M * N);

会好的。

【讨论】:

  • '\0' 不是 NUL 的终止符吗?理想的情况是重置,使其保持与双“L”的NULL一样?如果我错了,请纠正我,但 '\0' 真的和想要设置为 NULL 一样吗?
  • '\0' 确实也称为 NUL。它的数值是 0。但是 - 你不要将它用于指针。 NULL 是你分配给指针的东西......它的数值也是 0(无论如何在大多数平台上)。
【解决方案3】:

使用memset:

memset(params_vector, 0, sizeof(params_vector));

【讨论】:

  • 您可能想解释为什么这适用于大多数当前架构,但如果 params_vector 具有非整数成员,则不能完全移植。
  • @chqrlie:由于 OP 提到了“字符串向量”和char * arg[],我认为假设他/她在谈论字符是合理的。
  • 是的,是关于人物的!谢谢大家!
  • @Acorn:我的错,标题确实提到了 vector of strings,这使得 einpokulm 的回答非常有效。
  • @chqrlie:没问题! :-) 事实上,如果不需要清除整个内存而是使以空字符结尾的字符串为零长度,那么 einpokulm 的答案是完美的。但是,由于 OP 要求返回到初始化状态 (= {}),因此需要清除整个区域。
猜你喜欢
  • 1970-01-01
  • 2010-09-06
  • 1970-01-01
  • 2011-11-07
  • 2017-07-25
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多