处理文件中的字符串

时间:2016-08-17 14:19:48

标签: c++ c

我试图将文件中的数据保存到阵列中,但我现在没有运气。从文件中读取数据后,如果只是数字,可以很容易地保存数据,但是例如,如果我试图保存字符串,则程序会一次又一次地崩溃。我使用的是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]);
}

那就是它崩溃的地方。

2 个答案:

答案 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 (istd::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或更少。