把读取的每一行存放在char*里面
时间: 2023-12-20 14:06:16 浏览: 31
好的,可以使用fgets函数来读取每一行,并将其存储在char*类型的变量中。下面是一个示例代码:
```c
#include <stdio.h>
int main() {
FILE *fp;
char buffer[1024];
char *line;
fp = fopen("file.txt", "r");
if (fp == NULL) {
printf("Failed to open file\n");
return 1;
}
while ((line = fgets(buffer, sizeof(buffer), fp)) != NULL) {
printf("Read line: %s", line);
// 在这里可以对line进行处理,或者将其存储到一个数组中
}
fclose(fp);
return 0;
}
```
在这个示例中,我们打开了一个名为file.txt的文件,并使用fgets函数读取每一行。每一行都存储在buffer中,然后将其存储在line变量中。在while循环中,我们可以对line进行处理,或者将其存储到一个数组中。注意,fgets函数会返回NULL,表示已经读取完所有的行。最后,我们需要关闭文件句柄。
相关问题
char *cp; char symbol; int num; printf("enter how many symbols\n"); scanf("%d%c", &num,&symbol); cp = (char*)malloc(num * sizeof(char)); cp[0] = symbol; printf("%c ", &cp[0]);出错
这段代码有两个错误:
1. `printf("%c ", &cp[0]);`应该改为`printf("%c ", cp[0]);`,因为`cp[0]`是一个字符,而`&cp[0]`是一个字符类型的指针,`printf`函数的%c格式符需要的是一个字符。
2. 在读取输入时,应该将`%c`放在`%d`之后,因为在输入数字后按下Enter键时,会将一个换行符留在输入缓冲区中,如果不将换行符读取出来,会影响后续的输入操作。正确的输入语句应该是`scanf("%d%c", &num, &symbol);`,这样可以读取并丢弃换行符。
下面是修改后的代码:
```
char *cp;
char symbol;
int num;
printf("enter how many symbols\n");
scanf("%d%c", &num, &symbol);
cp = (char*)malloc(num * sizeof(char));
cp[0] = symbol;
printf("%c ", cp[0]);
```
这段代码为什么有问题:#define _CRT_SECURE_NO_WARNINGS #include<stdio.h> #include<string.h> #include<stdlib.h> int main() { FILE* file = NULL; file = fopen("D:\\csv draft.csv", "at+"); if (file != NULL) printf("打开文件成功!!\n"); else printf("失败!!\n"); char* line, * p;//字符指针 char buffer[60], s[60];//存储所有字符 const char* delim = ","; int k = 0; //一次获取所有字符,用strtok进行分割 fseek(file, 0L, SEEK_SET); line = fgets(buffer, 60, file);//先获取所有 strcpy(s, line);//字符指针转给字符常量,否则不能用strtok printf("%s", s); fclose(file); return 0;
这段代码存在以下问题:
1. `_CRT_SECURE_NO_WARNINGS` 应该写在文件的最前面,放在其他头文件之前。
2. `fopen` 函数打开文件时,应该检查是否成功打开文件,如果失败应该返回错误信息。
3. `fgets` 函数读取一行数据时,应该判断是否读取到数据,如果没有读取到则应该返回错误信息。
4. `strcpy` 函数将字符指针转换为字符常量是不必要的,因为 `fgets` 函数已经将读取到的行保存到了 `buffer` 数组中。
下面是修改后的代码:
```c
#define _CRT_SECURE_NO_WARNINGS
#include <stdio.h>
#include <string.h>
#include <stdlib.h>
int main()
{
FILE* file = NULL;
char buffer[60];
const char* delim = ",";
char* line, * p;
int k = 0;
file = fopen("D:\\csv draft.csv", "at+");
if (file == NULL) {
printf("打开文件失败!\n");
return -1;
}
if (fgets(buffer, 60, file) != NULL) {
line = strtok(buffer, delim);
while (line != NULL) {
printf("%s", line);
line = strtok(NULL, delim);
}
} else {
printf("读取文件失败!\n");
}
fclose(file);
return 0;
}
```
注意:`fgets` 函数一次最多只能读取一行数据,因此如果文件中有多行数据,需要使用循环读取每一行数据。
相关推荐
![rar](https://img-home.csdnimg.cn/images/20210720083606.png)
![docx](https://img-home.csdnimg.cn/images/20210720083331.png)
![pdf](https://img-home.csdnimg.cn/images/20210720083512.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)