逐行循环char数组

时间:2013-11-30 12:01:37

标签: c

我知道如何通过使用fopen,fgets等读取FILE *来逐行遍历文件 但我如何使用普通C逐行查看char数组? 我google了很多,只能找到从文件中读取的内容。

3 个答案:

答案 0 :(得分:3)

#include <stdio.h>

char *sgets(char *s, int n, const char **strp){
    if(**strp == '\0')return NULL;
    int i;
    for(i=0;i<n-1;++i, ++(*strp)){
        s[i] = **strp;
        if(**strp == '\0')
            break;
        if(**strp == '\n'){
            s[i+1]='\0';
            ++(*strp);
            break;
        }
    }
    if(i==n-1)
        s[i] = '\0';
    return s;
}

int main(){
    const char *data = "abc\nefg\nhhh\nij";
    char buff[16];
    const char **p = &data;

    while(NULL!=sgets(buff, sizeof(buff), p))
        printf("%s", buff);
    return 0;
}

答案 1 :(得分:0)

逐行读取字符数组:行是什么意思? '\ n'也许。

所以,遍历数组。

 int main()

{  char array[10]="ab\nbc\ncd\n";

 int lines =0;int i=0;

 while(array[i]!='\0')

 { if(array[i]!='\n')

      printf("%c",array[i++]); 

       else { lines++;i++;    printf("\n"); } 
 }  return 0;

 }

答案 2 :(得分:0)

如果要保持分隔符的灵活性(例如,您"\r\n")并坚持使用库,则strtok很方便:

#include <cstring>
int main() {
    const char separator[3] = "\r\n";
    char text[13] = "ab\r\ncd\r\nef\r\n";
    char *line = NULL;
    line = strtok(text, separator);
    while (line != NULL) {
        printf("%s\n", line);  // call your function to process line
        line = strtok(NULL, separator); // NULL means continue from where the previous successful call to strtok ended
    }
    system("pause"); // just prevent console from closing
}