所以我試圖逐行閱讀一個文本文件並將每行保存到一個char數組中。用strncpy將文件一行一行地拷貝到char數組中
從我在循環中的打印輸出中,我可以告訴它正在計數行和每行正確的字符數,但我遇到了與strncpy
有關的問題。當我嘗試打印數據數組時,它只顯示2個奇怪的字符。我從來沒有與strncpy
合作,所以我覺得我的問題可能與空終止有關。
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
int main(int argc, char* argv[])
{
FILE *f = fopen("/home/tgarvin/yes", "rb");
fseek(f, 0, SEEK_END);
long pos = ftell(f);
fseek(f, 0, SEEK_SET);
char *bytes = malloc(pos); fread(bytes, pos, 1, f);
int i = 0;
int counter = 0;
char* data[counter];
int length;
int len=strlen(data);
int start = 0;
int end = 0;
for(; i<pos; i++)
{
if(*(bytes+i)=='\n'){
end = i;
length=end-start;
data[counter]=(char*)malloc(sizeof(char)*(length)+1);
strncpy(data[counter], bytes+start, length);
printf("%d\n", counter);
printf("%d\n", length);
start=end+1;
counter=counter+1;
}
}
printf("%s\n", data);
return 0;
}
你的文本文件是什麼格式?它是ASCII還是Unicode(UTF-8或UTF-16)? 您是否還可以重新格式化代碼,使其顯示爲代碼並更具可讀性 - 例如,每條語句一行。 謝謝。 – ChrisBD 2010-07-13 15:46:47
我對代碼進行了重新格式化,但for語句在各種編輯中以某種方式被肢解;請檢查這是否是您正在使用的代碼。 – 2010-07-13 15:52:33
我不確定你的問題的解決方案是什麼,因爲我有類似的問題,但我想我會給一個小建議:你應該能夠使用strdup而不是自己mallocing內存,然後使用strncopy。 strdup將使用malloc來分配內存並處理複製過程。只爲你節省一條線,但我是內置函數的忠實粉絲。 – Chris 2013-10-13 00:27:04