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数组,操纵(很多!)代码以正确使用它,但现在它可以工作了。谢谢。