编写一个shell脚本,在当前目录中查找包含字符串“struct”的C语言文件,找到文件后将文件名显示,并把该文件内容显示出来。
时间: 2024-02-06 07:11:36 浏览: 26
好的,以下是符合你要求的shell脚本:
```bash
#!/bin/bash
# 查找包含字符串“struct”的C语言文件
files=$(grep -rl "struct" *.c)
# 循环遍历符合条件的文件并输出文件名和文件内容
for file in $files
do
echo "File: $file"
cat $file
done
```
你只需要在要查找的目录下创建一个名为 `find_struct.sh` 的文件,将以上代码复制到文件中,并在终端执行 `./find_struct.sh` 即可。注意,在执行脚本前需要先给脚本添加执行权限,可以使用命令 `chmod +x find_struct.sh` 来添加权限。
相关问题
在c语言中如何将fread对象从文件中的结构体到一个设定的字符串
如果你想将从文件中读取的结构体数据存储到一个字符串中,你可以使用`memcpy()`函数将数据从结构体复制到字符串中。以下是一个示例代码:
```c
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
typedef struct {
int id;
char name[20];
float salary;
} Employee;
int main() {
FILE *file;
Employee employee;
char buffer[100]; // 假设字符串缓冲区大小为100
// 打开文件
file = fopen("employee.dat", "rb");
if (file == NULL) {
printf("无法打开文件\n");
return 1;
}
// 读取结构体数据
fread(&employee, sizeof(Employee), 1, file);
// 将结构体数据复制到字符串缓冲区中
memcpy(buffer, &employee, sizeof(Employee));
// 关闭文件
fclose(file);
// 打印字符串
printf("字符串: %s\n", buffer);
return 0;
}
```
在这个示例中,我们定义了一个结构体 `Employee`,然后使用 `fread()` 从文件中读取一个 `Employee` 结构体的数据。接下来,我们使用 `memcpy()` 将结构体数据从 `employee` 复制到 `buffer` 字符串缓冲区中。最后,我们打印出复制后的字符串。
请注意,这种方法只适用于包含简单数据类型的结构体。如果结构体包含指针或其他复杂类型的成员,复制它们的内存可能会导致无法预料的结果。在处理复杂结构体时,需要采用其他方法来将其转换为字符串。
从键盘输入学生若干信息,并把这些学生信息保存在一个文件中,文件名由键盘输入指定C语言
你可以使用以下代码实现从键盘输入学生信息并将其保存到文件中:
```c
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#define MAX_STUDENTS 100
struct Student {
char name[20];
int age;
char sex[10];
};
int main() {
char filename[50];
struct Student students[MAX_STUDENTS];
int num_students = 0;
// 获取文件名
printf("请输入文件名:");
fgets(filename, sizeof(filename), stdin);
filename[strlen(filename) - 1] = '\0';
// 从键盘输入学生信息
while (num_students < MAX_STUDENTS) {
printf("请输入学生姓名(输入exit退出):");
fgets(students[num_students].name, sizeof(students[num_students].name), stdin);
students[num_students].name[strlen(students[num_students].name) - 1] = '\0';
if (strcmp(students[num_students].name, "exit") == 0) {
break;
}
printf("请输入学生年龄:");
scanf("%d", &students[num_students].age);
getchar();
printf("请输入学生性别:");
fgets(students[num_students].sex, sizeof(students[num_students].sex), stdin);
students[num_students].sex[strlen(students[num_students].sex) - 1] = '\0';
num_students++;
}
// 将学生信息保存到文件中
FILE *fp = fopen(filename, "w");
if (fp == NULL) {
printf("无法打开文件 %s\n", filename);
exit(1);
}
for (int i = 0; i < num_students; i++) {
fprintf(fp, "%s,%d,%s\n", students[i].name, students[i].age, students[i].sex);
}
fclose(fp);
printf("学生信息已保存到文件 %s 中\n", filename);
return 0;
}
```
这段代码首先获取用户输入的文件名,然后使用一个 while 循环从键盘输入学生信息,每输入一个学生信息就将其保存到一个结构体数组中,最后将所有学生信息保存到文件中。保存到文件的格式为每行一个学生信息,学生信息的各个字段用逗号分隔。注意要用 fgets 函数读取字符串,以避免输入缓冲区中的换行符干扰下一次输入。