2

我正在尝试将“字符串”复制到 C 中的字符串数组:

const gchar  *strAuth, *strEditor, *strTitle; 
gchar *strings[18][150];
strcpy(strings[0],strAuth);

编译时,gcc 发出警告:警告:从不兼容的指针类型传递“strcpy”的参数 1 [默认启用]

可能是由于我的这个故障,代码后面的检查和打印

  g_print("%s", strings[0]);
  int i=0;
  while (i <= 18) {
    if (strlen(strings[i]) != 0) {
      g_string_append_printf(tstring, "\t%s=\"%s\",\n",
      keyword[i], strings[i]);
      i++;
    } 
  }

也不起作用(它也在打印空字符串)。C不是我的语言,所以请帮忙

注意:检查了这个这个,但没有帮助自己注意:gchar“对应于标准 C char 类型。” 在油嘴滑舌的

4

2 回答 2

4

您尚未声明字符串数组。您已经声明了一个 18x150 指向 char 的 2D 数组。

因此,您会收到警告:您正在尝试将字符串复制到指针数组中。

一个字符串数组将是char strings [18][150].

于 2013-06-11T14:13:55.967 回答
1

最直接的修复(没有提出完全不同的方法)需要几个修复。

关于警告的事情是您正在创建一个 18x150 指针数组,但我想您想要 18 个长度为 150 的字符串,所以定义应该是:

gchar strings[18][150];  // 18 strings of 150 chars

您的代码看起来的方式,您可能还会假设初始化为零(如果未填充则为空字符串),因此您可以添加:

gchar strings[18][150]= { "", };  // 18 empty strings of 150 chars

.

您的代码中的另一个(更严重的)错误是您的循环正在运行 [0...18]。但是您的字符串列表只是gchar *strings[18][150]; 它应该运行 [0..17]。当长度 strings[i] 为零时,I 的增量也应该发生(否则你将得到一个无限循环,如果一个字符串为空,则永远不会到达末尾)。

  while (i < 18) {  // <-- FIX 
    if (strlen(strings[i]) != 0) {
      g_string_append_printf(tstring, "\t%s=\"%s\",\n",
      keyword[i], strings[i]);
    } 
    i++;  // <-- FIX 
  }
于 2013-06-11T14:15:41.193 回答