struct 的使用...#include <string.h>...char *strcpy(char *, const char *);

本文详细解析了C语言中结构体与指针的使用方法,通过实例展示了如何定义、初始化、访问和修改结构体成员,以及指针在操作结构体中的应用。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >


#include <stdio.h>
#include <string.h>
int main(int argc, const char * argv[])
{

	printf("%d\n", 1);
	printf("%s\n", "aaa");

	struct Student {
		char * name;
		int age;
	};

	struct Student stu[2] = { { "项羽", 18 }, { "刘邦", 19 } };
	printf("%s\n", stu[0].name);

	struct Student dashen[2];
	dashen[0].name = "zhangsan";
	strcpy(dashen[1].name, "lisi");
	printf("%s\n", dashen[1].name);

	struct Student pp[2];
	printf("请输入一个字符串\n");
	//scanf("%s",pp[0].name);

	printf("%s\n", pp[0].name);

	pp[1] = (struct Student){ "wangwu", 55 };
	printf("%s\n", pp[1].name);

	for (int i = 0; i < 2; i++) {
		printf("name = %s , age = %d\n", pp[i].name, pp[i].age);
	}

	return 0;
}


### 替代头文件的选择 在Linux内核开发中,由于标准库函数不可用,因此需要寻找适合内核环境的替代方案。以下是针对提到的标准头文件的一些常见替换方法: #### 1. stdio.h 的替代 `stdio.h` 是用于输入输出操作的标准库头文件,在内核环境中无法直接使用。取而代之的是 `printk()` 函数来完成日志打印功能[^2]。 ```c #include <linux/kernel.h> // 提供 printk() printk(KERN_INFO "This is a kernel message\n"); ``` #### 2. string.h 的替代 对于字符串处理函数(如 `strcpy`, `strlen` 等),可以使用 `<linux/string.h>` 中定义的同名函数[^3]。 ```c #include <linux/string.h> char dest[50]; strncpy(dest, "Kernel String", sizeof(dest) - 1); dest[sizeof(dest) - 1] = '\0'; ``` #### 3. sys/types.h 和 sys/stat.h 的替代 这些头文件通常提供基本数据类型的定义和文件状态相关的宏。在内核空间中,可以通过以下方式代替: - 使用 `<linux/types.h>` 来获取基础类型定义。 - 文件属性检测可以直接通过 VFS 层次中的 inode 结构体成员变量实现,无需显式调用用户态下的 stat 宏[^4]。 ```c #include <linux/fs.h> struct inode *inode; if (S_ISREG(inode->i_mode)) printk("Regular File\n"); else if (S_ISDIR(inode->i_mode)) printk("Directory\n"); ``` #### 4. fcntl.h 的替代 该头文件主要用于文件控制命令。而在内核编程里,类似的逻辑可通过 file_operations 结构体及其关联的方法实现[^5]。 ```c static int example_open(struct inode *inode, struct file *filp){ /* Open logic here */ } static const struct file_operations my_fops = { .open = example_open, }; ``` #### 5. unistd.h 的替代 此头文件包含了大量 UNIX 标准定义的功能声明。然而,在内核模式下并不支持此类接口;如果确实存在某些特定需求,则需自行封装或者利用现有框架内的工具集满足相应目的[^6]。 #### 关于 xsm3.h 未找到确切资料表明其具体用途或作用范围,请确认是否为拼写错误或是特殊领域专用API集合名称。 ### 总结 综上所述,在进行 Linux 内核模块编写时应尽量避免依赖传统应用程序级别的库资源,转而采用专门设计给驱动程序及其他核心组件使用的 API 接口和服务设施。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值