char数组保存最后一个元素
我编写了一个代码,从文件中读取字符串并将其存储在char数组中。问题是,当我打印之前存储的字符串时,我只得到数组的每个元素在while循环结束时都存储了相同的信息 问题在于数组“ori”和“des”。在while循环之后,我打印了其中的信息,但我只是让最后一个项目反复存储 代码如下:char数组保存最后一个元素,c,arrays,pointers,C,Arrays,Pointers,我编写了一个代码,从文件中读取字符串并将其存储在char数组中。问题是,当我打印之前存储的字符串时,我只得到数组的每个元素在while循环结束时都存储了相同的信息 问题在于数组“ori”和“des”。在while循环之后,我打印了其中的信息,但我只是让最后一个项目反复存储 代码如下: #include <stdio.h> #include <stdlib.h> #include <string.h> int main() { FILE *f; int s
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
int main() {
FILE *f;
int sale[31];
int llega[31];
char* ori[31];
char* des[31];
int i;
int j;
char string1 [31];
char string2 [31];
char string3 [31];
char string4 [31];
f=fopen("rol.txt","rt");
i = 0;
while((fscanf(f,"%[^\t]\t%[^\t]\t%[^\t]\t%[^\n]\n", string1, string2, string3, string4 ))!= EOF){
printf( "%s\t%s\t%s\t%s\n", string1, string2, string3, string4 );
sale[i] = strtol(string1, NULL, 10);
llega[i] = strtol(string4, NULL, 10);
ori[i] = string2; //Here is where I think I am storing the value of string2
des[i] = string3; //Here is where I think I am storing the value of string3
i++;
}
for (j = 0; j < 31; j++ ){
printf("%s %s %d\n",ori[j],des[j],j); //Here for every "j" I get the same result
}
fclose(f);
return 0;
}
#包括
#包括
#包括
int main(){
文件*f;
国际销售[31];
int llega[31];
char*ori[31];
char*des[31];
int i;
int j;
charstring1[31];
char string2[31];
charstring3[31];
字符串4[31];
f=fopen(“rol.txt”、“rt”);
i=0;
而((fscanf(f,“%[^\t]\t%[^\t]\t%[^\t]\t%[^\n]\n”,string1,string2,string3,string4))!=EOF){
printf(“%s\t%s\t%s\t%s\t%s\n”,字符串1、字符串2、字符串3、字符串4);
销售[i]=strtol(string1,NULL,10);
llega[i]=strtol(string4,NULL,10);
ori[i]=string2;//这里是存储string2值的地方
des[i]=string3;//这里是存储string3值的地方
i++;
}
对于(j=0;j<31;j++){
printf(“%s%s%d\n”,ori[j],des[j],j);//这里对于每个“j”,我得到相同的结果
}
fclose(f);
返回0;
}
是。这是一种预期行为,因为char*ori[31]
是一个字符指针数组。语句ori[i]=string2
(ori[i]=&string2[0]
两者都是相似的东西)分配string2
的地址。因此,所有ori[i]
将包含string2
现在保存的内容(在本例中,它是while循环的最后一个赋值)
使用字符串数组
创建字符字符串数组:
char ori[31][31];
char des[31][31];
分配
strcpy(ori[i], string2);
strcpy(des[i], string3);
或者
<强>使用<代码> STD::String < /Calp>(如果你使用C++)
您可以使用:string ori[31];
string des[31];
及
并打印为printf(“%s\t%s\n”,ori[j].c_str(),des[j].c_str())
您还需要导入header
ori[i]
是一个指针,而不是字符串。ori[i]=&string2[0]
与ori[i]=string2
相同吗?奥利,问题是如果我使用字符数组而不是指针“ori”,那么我就不能将string2的值分配给它。我得到了这样的错误:错误2168:操作数''= '',有不兼容的类型'char '和'char * '。Igor,我按你说的方式尝试了完全相同的结果。谢谢,但是我如何存储<代码> StRIG2<代码>的内容而不是地址?我在C中编码,我做了你建议的更改,但是我猜是C++的。对不起,如果我错了,但是我弄糊涂了。无论如何,我有很多错误,这就是为什么我认为这可能与我的第二次编辑有关。你可以很容易地遵循第一种方法,多亏了它的有效性。如果你能解释为什么双[31][31]是一个二维数组,那会不会太过分了。在本例中,它表示字符数组(字符串)的数组。
ori[i] = string(string2);
des[i] = string(string3);