2012-10-26 43 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; 
} 

我希望上面的代码是不言自明。但如果有什么需要澄清的话,请不要犹豫,问。

祝你好运!