字符指针与字符数组的区别与关系
EOF使用指北,南辕北辙!
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
typedef struct LNode{
char name[20];
struct LNode *next;
}LNode,*LinkList;
int main() {
char str1[20];
char* name=str1; //指针及时初始其指向,否则其指向未知导致程序出错
char str2[20] = "name";
strcpy(name, str2); //深拷贝,与name=str2的浅拷贝相比,是拷贝内容而非str2的地址
printf("%s\n", name);
/*用scanf的本质操作对象是写入字符数组,如果格式化字符串后是字符指针,需要先让它指向一个字符数组(尽量别用为初始化后的指针)*/
char list[20];
char* temp = list;
scanf("%s", temp);
printf("%s", temp);
/*Windows下的Visual Studio表示EOF用三行crtl+Z*/
/*1.读取数据 2.生成不定数量 3.含有字符串 4.的链表结点 逻辑顺序:
结点结构体的字符串选用字符数组,不适合字符指针,因为字符指针需要指向相应的字符数组,那不就还是用字符数组
↓
生成一个结点
循环条件用此结点,EOF
循环体内再生成一个结点,依次互相独立
*/
LinkList L;
L = (LinkList)malloc(sizeof(LNode));
L->next = NULL; //看到指针赶紧初始化哈哈
LinkList s = (LinkList)malloc(sizeof(LNode));
while (scanf("%s", s->name) != EOF) {
s->next=L->next;
L->next = s;
s = (LinkList)malloc(sizeof(LNode)); //再开一个存储空间
}
LinkList p = L;
while (p->next) { //遍历验证结果
p = p->next;
printf("%s ", p->name);
}
//结束了!全都没有问题
return 0;
}
第三个小块重点试验: