【问题标题】:Multidimensional array of char pointerchar指针的多维数组
【发布时间】:2013-04-29 09:39:06
【问题描述】:

大家好,

有一些我想不通的大问题。 我创建了一个多维指针数组:

char *listA[5000][2];

在特定情况下,我希望将特定字符串保存在此数组中。 这些是一个普通的字符串,在一个简单的变量中,另一个包含在一个字符串数组中。

 listA[j][0]=strMix;
 listA[j][1]=ingredients[i];
 j++;

j,当然是行,每增加一次。

结果必须是一个数组,每行包含两列,一列包含成分,另一列包含相对的 strMix。

问题是当我尝试读取这个多维数组时:

printf( "%s", listA[0][1]); // the ingredient

总是正确的,但是:

printf( "%s", listA[0][0]); // the strMix code

总是不正确的;它准确地读取每一行的最后一个 strMix 读取。

我试图改变列的顺序,但令我大吃一惊的是,问题总是出在 strMix 上,而不是 ingredients[i] 字符串。

strMix 列只有在我将其写入 listA 并立即读取时才是正确的。当然,我会说。

例如:

printf("Current: %s vs Previously: %s",lista[j][0], lista[j-1][0]);

它们是相同的,对于每个 j,等于最后一次读取的 strMix。

如果您有任何想法、关于内存或多维指针数组的任何想法,而我只是缺少这些,我会很感激您的建议。

感谢您抽出宝贵时间。 fdt.

【问题讨论】:

  • 你在那里展示的一切似乎都是合理的——向我们展示你初始化这个数组的代码。这可能就是你的麻烦所在。
  • 这是一个常见问题。通常问题是没有为每个读取的项目分配一个新字符串。
  • 告诉我们你在哪里设置指针strMix,或者它指向的数组的内容。
  • Tnx Carl Norum、Vaughn Cato 和 Andy Thomas-Cramer。 strMix 是一个由函数操作的字符串。

标签: c++ c string pointers multidimensional-array


【解决方案1】:

你不是在这个数组中保存字符串——你是在保存指针。

此语句复制的是地址,而不是字符串:

 listA[j][0]=strMix;

如果你想复制字符串,你可以:

  • 使用存储字符串的 char 数组。对于某些字符串,这可能会占用太多内存。对于其他人来说,它可能提供的还不够。
  • 使用 char* 数组来存储字符串的地址,并且为每个引用的字符串分配单独的内存。

无论如何,要复制字符串,首选strncpy() 而不是不安全的strcpy()

【讨论】:

  • 感谢您的回答。我尝试使用地址,通过指针指向 strMix 并将其传递给 listA,但问题是一样的。 strMix 实际上是一个 char 数组。
  • 当你单独使用strmix时,它的值是一个地址,无论你声明它是char strmix[]还是char* strmix。如果您在其中声明并设置它的代码,则修复应该相当简单。
  • 我明白了!我完全明白了。该解决方案的灵感来自您的帮助。问题确实是 st​​rMix (char strMix[20]) 的声明。 'ingredients' 是 (ingredients[TOT][TOT]: char 的二维数组)。我也为strMix创建了一个char数组,操纵(很多!)代码以正确使用它,但现在它可以工作了。非常感谢。
【解决方案2】:

是 C 还是 C++?也许而不是使用分配:

listA[j][0]=strMix;

你应该使用 strcpy 函数吗?

strcpy (listA[j][0], strMix);

【讨论】:

  • 感谢您的回答。我尝试使用 strcpy 和 strncpy,但程序崩溃了。是 C。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-01-26
  • 1970-01-01
  • 2018-04-05
  • 1970-01-01
  • 2013-05-12
相关资源
最近更新 更多