Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/c/70.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
char数组保存最后一个元素_C_Arrays_Pointers - Fatal编程技术网

char数组保存最后一个元素

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

我编写了一个代码,从文件中读取字符串并将其存储在char数组中。问题是,当我打印之前存储的字符串时,我只得到数组的每个元素在while循环结束时都存储了相同的信息

问题在于数组“ori”和“des”。在while循环之后,我打印了其中的信息,但我只是让最后一个项目反复存储

代码如下:

#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);