Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/c/55.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ 多维字符指针数组_C++_C_String_Pointers_Multidimensional Array - Fatal编程技术网

C++ 多维字符指针数组

C++ 多维字符指针数组,c++,c,string,pointers,multidimensional-array,C++,C,String,Pointers,Multidimensional Array,大家好 有什么大不了的事我想不出来。 我创建了一个多维指针数组: char *listA[5000][2]; 在特定条件下,我希望特定字符串保存在此数组中。 这是一个普通字符串,位于一个简单变量中,另一个包含在字符串数组中 listA[j][0]=strMix; listA[j][1]=ingredients[i]; j++; j、 当然,是行,每增加一行就增加一行 结果必须是一个数组,对于每一行,该数组包含两列,一列包含成分,另一列包含相对strMix 问题是,当我尝试读取此多维数组

大家好

有什么大不了的事我想不出来。 我创建了一个多维指针数组:

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,而不是配料[I]字符串

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

例如:

printf("Current: %s vs Previously: %s",lista[j][0], lista[j-1][0]);
对于每个j,它们都是相同的,等于最后一次读取的strMix

如果您对内存或多维指针数组有任何想法,我只是不知道,我将非常感谢您的建议

无论如何,谢谢你抽出时间。
FDT.

< P>是C还是C++?可能不使用作业:

listA[j][0]=strMix;
你应该使用strcpy函数吗

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

是C还是C++?可能不使用作业:

listA[j][0]=strMix;
你应该使用strcpy函数吗

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

您没有在这个数组中保存字符串,而是保存指针

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

 listA[j][0]=strMix;
如果要复制字符串,可以执行以下操作之一:

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

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

您没有将字符串保存在此数组中,而是保存指针

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

 listA[j][0]=strMix;
如果要复制字符串,可以执行以下操作之一:

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

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

在那里显示的所有内容似乎都是合理的-向我们显示初始化此数组的代码。这可能就是你的问题所在。这是一个常见的问题。通常问题是没有为读取的每个项分配新字符串。并向我们显示指针strMix的设置位置,或指针指向的数组的内容。Tnx Carl Norum、Vaughn Cato和Andy Thomas Cramer。strMix是一个由函数操作的字符串。您在这里显示的所有内容似乎都是合理的-向我们显示初始化此数组的代码。这可能就是你的问题所在。这是一个常见的问题。通常问题是没有为读取的每个项分配新字符串。并向我们显示指针strMix的设置位置,或指针指向的数组的内容。Tnx Carl Norum、Vaughn Cato和Andy Thomas Cramer。strMix是一个由函数操作的字符串。谢谢你的回答。我尝试使用strcpy和strncpy,但是程序崩溃了。是C。谢谢你的回答。我尝试使用strcpy和strncpy,但是程序崩溃了。是C。谢谢你的回答。我试图使用地址,通过指针指向strMix并将其传递给listA,但问题是相同的。strMix实际上是一个char数组。当您单独使用strMix时,它的值是一个地址,无论您是声明为char strMix[]还是char*strMix。如果您在声明和设置代码的地方添加了代码,那么修复应该相当简单。我明白了!我完全明白。这个解决方案是受你的帮助启发提出的。问题确实是strMix的声明(char strMix[20])“配料”是(配料[TOT][TOT]:字符的2D数组)。我还为strMix创建了一个char数组,操纵(很多!)代码以正确使用它,但现在它可以工作了。非常感谢你的回答。我试图使用地址,通过指针指向strMix并将其传递给listA,但问题是相同的。strMix实际上是一个char数组。当您单独使用strMix时,它的值是一个地址,无论您是声明为char strMix[]还是char*strMix。如果您在声明和设置代码的地方添加了代码,那么修复应该相当简单。我明白了!我完全明白。这个解决方案是受你的帮助启发提出的。问题确实是strMix的声明(char strMix[20])“配料”是(配料[TOT][TOT]:字符的2D数组)。我还为strMix创建了一个char数组,操纵(很多!)代码以正确使用它,但现在它可以工作了。谢谢。