我试图将文件中的数据保存到阵列中,但我现在没有运气。从文件中读取数据后,如果只是数字,可以很容易地保存数据,但是例如,如果我试图保存字符串,则程序会一次又一次地崩溃。我使用的是fscanf();函数,因为整个.txt文件以相同的格式编写:"名字,姓氏"。现在,我已经尝试过以这种方式使用for循环:
char *firstName = (char*)malloc(sizeof(char)*10240);
char *lastName = (char*)malloc(sizeof(char)*10240);
for(int i = 0; i<10; i++){
fscanf(fp, "%s %s", firstName[i],lastName[i]);
}
那就是它崩溃的地方。
答案 0 :(得分:2)
纯C代码:
您必须先分配数组数组,然后逐个分配每个字符串 最好将字符串扫描成大尺寸的临时字符串,然后再复制字符串。
import { NgModule } from '@angular/core';
import { BrowserModule } from '@angular/platform-browser';
import { AppComponent } from './app.component';
@NgModule({
imports: [BrowserModule],
declarations: [AppComponent],
bootstrap: [AppComponent]
})
export class AppModule { }
请注意,我已将int i,nb_names = 10;
char **firstName = malloc(sizeof *firstName * nb_names);
char **lastName = malloc(sizeof *lastName *nb_names);
char tempn[1000],templ[1000];
for(i = 0; i<nb_names; i++){
fscanf(fp,"%s %s", tempn,templ);
firstName[i] = strdup(tempn);
lastName[i] = strdup(templ);
}
更改为for (int i
,因为它不符合C标准,而是符合C ++(或C99,不确定)。
对于C ++,请删除malloc并改为使用for (i
和std::vector
。
如果可以的话,我建议使用C ++。我回答了很多关于人们尝试(和失败)正确分配2D数组的问题(包括我5分钟前该死的:))。使用C ++库代码的C ++更加清晰。
完整的C ++示例,从标准输入读取
std:string
答案 1 :(得分:-1)
代码中的错误是:firstName [i]是一个字符而不是字符串,但是你使用%s代替%c就像字符串一样使用它。
你应该使用char **而不是char *。
char ** firstName =(char **)malloc(10 * sizeof(char)* 10240);
我认为10240对于firstName来说太多了。使用255或更少。