2012-10-26 97 views
0

每次嘗試讀取3個字母時,我都會遇到問題,我想逐行閱讀,並在每行中逐行讀取3個字母。讀取一行,並一次讀取三個字母C

找到\ n當讀線時跳轉到下一行...

我試試這個

while ((getline(&line, &lenght, file)) != -1){ 
    while ((strncpy(ch, line, 3)) != NULL) { 

     let = replaceletter(tab, ch); 

     if (let != 0) 
      printf("%c", let); 
    } 
} 

,但它不工作,只是讀了前3個字母,我想整條線。 我真的不知道如何做到這一點,我需要幫助,請

+1

請使用正確的英文。 – texasbruce

+0

你嘗試過使用sscanf()嗎? –

回答

1

我不明白第二個while循環應該如何工作。在這種情況下,strncpy返回s1,IE ch。 ch最好是char *。

所以..怎麼是永遠不會== NULL,除非它已經是NULL開始與?如果CH是NULL與(沒有顯示它的初始化)開始,然後它已經是一個段錯誤:)

這可能是有意義的,如果這條線是

while(*(strncpy(ch, line, 3)) != NULL)) { 

HTH

+0

ch被聲明爲:char * ch; – user1364304

+0

@ user1364304:如果你有'char * ch;'並且將一個字符串複製到它中,那麼你有麻煩了。 – 2012-10-26 03:28:25

+0

@ vlad-lazarenko在C語言中,複製字符串的唯一合法的東西是char *。男人strncpy()函數告訴我們: '名稱 的strcpy,strncpy()函數 - 複製字符串 提要 的#include 的char *的strcpy(字符* DEST,爲const char * SRC); char * strncpy(char * dest,const char * src,size_t n);' – GreenAsJade

0

你可能會遇到問題,當你的行是< 3個字符長。嘗試更好,更強大的方式來指定strncpy應該複製的字節數,就像使用C中的某種Min函數實現一樣(更多信息here)。

+0

我想要讀取的文本文件已經準備好被讀取3一次問題是\ n在行尾 – user1364304

0

有在您的代碼中可能做得更好的事情有:

  1. 代碼不檢查讀取了多少個字符。線路是否太短?
  2. 目前尚不清楚爲什麼strncpy的回報正在檢查NULL。它不返回NULL
  3. 目前尚不清楚您是否初始化linelenght以及具體值。
  4. 不幸的是,它很難成爲一個心理學家,並且猜測什麼是replaceletter,它做了什麼,以及如何聲明tabch
  5. 對於爲什麼strncpywhile循環中被調用是個謎。
  6. 看起來你的程序並沒有考慮換行字符是返回字符串的一部分。

換句話說,如果你想得到更多或更少的幫助,最好提供一個小的,完整的工作示例來展示你的問題。

如果我被分配了任務,我可能會寫這樣的:

#include <stdlib.h> 
#include <stdio.h> 
#include <errno.h> 

int main(void) 
{ 
    int ret  = EXIT_SUCCESS; 
    char *line = NULL; 
    size_t linecap = 0; 
    ssize_t len; 

    do { 
     len = getline(&line, &linecap, stdin); 
     if (len == -1) { 
      if (errno != 0) { 
       perror("readline"); 
       ret = EXIT_FAILURE; 
      } 
      break; 
     } 
     if (len < 4) 
      continue; /* Line is too short, try again */ 
     /* printf("The line is: %s", line); */ 
     printf("First three letters are: '%.*s'\n", 3, line); 
    } while(1); 

    free(line); /* It is always a good idea to cleanup after yourself */ 
    return ret; 
} 

我希望上面的代碼是不言自明。但如果有什麼需要澄清的話,請不要猶豫,問。

祝你好運!