我的方法讀取一個輸入的向量文本,格式如下:
我的方法讀取一個輸入的向量文本,格式如下:
我的方法讀取一個輸入的向量文本,格式如下:
我的方法讀取一個輸入的向量文本,格式如下
57.0000,-7.4703,-0.3561<
81.0000,-4.6478,7.9474[/span
69.0000,-8.3768,0.4391[/span].
18.0000,-4.9377,9.9903[/span].
62.0000,5.8751,6.6054.
...
我試圖讀取每個向量并將其插入一個陣列,如下所示:
FILE *file;
int n = 1, dim, i=0;
char* str;
double ret;
double* X。
int c;
int com=0;
assert(argc==2 && "argc !=2")。
file = fopen(argv[1], "r") 。
assert(file && "file is empty")。
for(c = getc(file); c! = EOF; c = getc(file)){
if(c == '
'){
n ;
}
else if(c==', '){
com ;
}
}
dim = com/n 1。
char* str;
double ret;
double* X。
X = (double *)calloc(n*n, sizeof(double)。
assert(X);
str = (char *)calloc(100, sizeof(char)) 。
assert(str)。
for(c = getc(file); c! = EOF; c = getc(file)){
if(c!=',' && c!='
'){
strcat(str, &c)。
}
else{
ret = strtod(str, NULL)。
X[i] = ret;
i ;
memset(str, 0, 100 * sizeof(char) ) 。
}
問題是,當它到達每一行的最后一個向量時,它讀取每個char并將其與額外的垃圾連接到str。有什么想法可以解決這個問題嗎?
uj5u.com熱心網友回復:
strcat期望一個以NUL結尾的字串(char的陣列)作為它的第二個引數,但
c被定義為一個單一的字符,而不是一個char陣列。
為了解決這個問題,你可以在str中保持一個索引,
int c。
int j = 0;
for (c = getc(file); c! = EOF; c = getc(file)) {
if (c != ', ' && c != '
') {
str[j ] = c;
str[j] = 0; //keep string NUL-terminated。
} else {
ret = strtod(str, NULL)。
X[i] = ret;
i ;
// reset j
j = 0;
}
uj5u.com熱心網友回復:
由于c是char,下面的內容是無效的。
c = getc(file); c!= EOF;
并且
strcat(str, &c);
兩者都是未定義行為。為了解決第一個問題,將c宣告為int
第二個問題:
//你需要創建一個空字符結束的字串來作為。
//s second parameters of the srtcat. 例如,你可以定義 //秒的srtcat引數。
/a compound literal - char array containing two elements: c &
//A composite literal - char array containing two elements: c &
strcat(str,(char []){c,0}) 。
轉載請註明出處,本文鏈接:https://www.uj5u.com/houduan/310465.html
標籤:
