#include<stdio.h> void del(char *a,char *b) { while(*a!=' ') a++; while(*b!='\0') *b++=*a++; *b='\0'; } int main() { char a[100],b[100]; gets(a); del(a,b); puts(b); return 0; }哪里错了
时间: 2024-01-17 08:04:39 浏览: 69
这个版本的代码已经没有问题了,与之前的代码相比,唯一的区别是在调用 del 函数时传入了正确的参数,即 del(a, b)。
不过需要注意的是,使用 gets 函数读取用户输入时存在缓冲区溢出的风险,建议使用 fgets 函数代替,例如:
```
fgets(a, 100, stdin);
```
这里将最大输入长度限制为 100,防止输入过长导致缓冲区溢出。同时,指定文件指针为 stdin,表示从标准输入读取数据。
相关问题
与山应标节语句狂释,标号4写对应完整程序块注释)。 #include <stdio.h> void del space(char*sl); /(1) int main(int arge, char *argv]) char s,="hasdf g"; puts(s); //(2) del_space(s); puts(s); //(3) return 0; void del space(char*sl) chars2; s2=s1 while (*sl) if(*s1='") s1++; else ( *s2=*s1; s1++; s2++; -1/(4) *s2 ="10'; 注释: (1) (2) (3) (4) 简述完整程序功能:
以下是完整程序块注释:
```c
#include <stdio.h>
// 声明函数del_space
void del_space(char *sl);
int main(int argc, char *argv[]) {
// 初始化字符串s
char s[] = "hasdf g";
// 输出原字符串s
puts(s);
// 调用函数del_space对s进行处理
del_space(s);
// 输出处理后的字符串s
puts(s);
// 程序执行完毕,返回0
return 0;
}
// 定义函数del_space
void del_space(char *sl) {
// 定义辅助字符串s2
char s2[100];
// 将s1指向字符串sl的头部
char *s1 = sl;
// 将s2指向字符串s1的头部
char *s2_ptr = s2;
// 遍历字符串s1中的每个字符
while (*s1) {
// 当字符不是空格时,将字符存储在s2中,并将s2的指针后移
if (*s1 != ' ') {
*s2_ptr = *s1;
s2_ptr++;
}
// 将s1的指针后移
s1++;
}
// 将s2的末尾字符赋值为'1'
*(s2_ptr++) = '1';
// 将s2的末尾字符赋值为'0'
*(s2_ptr++) = '0';
// 将处理后的字符串s2拷贝回原字符串sl的位置
while (*s2) {
*sl = *s2;
sl++;
s2++;
}
// 将字符串sl的末尾设置为'\0',表示字符串结束
*sl = '\0';
}
```
该程序的功能是将字符串中的空格字符删除,并在字符串末尾添加字符'1'和'0'。程序首先定义了一个辅助字符串s2来存储处理后的结果,然后遍历原字符串中的每个字符,将不是空格的字符存储在s2中。最后将处理后的字符串s2拷贝回原字符串的位置,并在字符串末尾添加字符'1'和'0'。
数据结构补全代码#include<stdio.h> #include<stdlib.h> typedef struct Linklist{ char name[10]; char num[10]; struct Linklist *next; }Linklist,*LNode; //创建链表 //输出链表 //修改链表中的某一项 //在链表尾部插入一项 //在链表中删除一项 void main(){ Linklist *L; int i=255; L=(LNode)malloc(sizeof(Linklist)); L->next=NULL; create(L); while(i!=0){ puts("\n功能:\n1.输出\t2.修改\t3.删除\t4.插入\t0.退出"); scanf("%d",&i); switch(i){ case 1: output(L); break; case 2: update(L); break; case 3: del(L); break; case 4: insert(L); break; } } }
好的,这段代码是一个链表的基本操作。下面是完整的代码,包括创建链表、输出链表、修改链表、在链表尾部插入一项、在链表中删除一项等功能。
```
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
typedef struct Linklist {
char name[10];
char num[10];
struct Linklist *next;
} Linklist, *LNode;
// 创建链表
void create(Linklist *L) {
int n;
printf("请输入链表中节点的个数:");
scanf("%d", &n);
LNode p = L;
for (int i = 0; i < n; i++) {
LNode node = (LNode)malloc(sizeof(Linklist));
printf("请输入第%d个节点的姓名和学号:", i+1);
scanf("%s %s", node->name, node->num);
p->next = node;
p = node;
}
p->next = NULL;
}
// 输出链表
void output(Linklist *L) {
LNode p = L->next;
printf("链表中的节点信息为:\n");
while (p != NULL) {
printf("%s %s\n", p->name, p->num);
p = p->next;
}
}
// 修改链表中的某一项
void update(Linklist *L) {
char num[10];
printf("请输入要修改的节点的学号:");
scanf("%s", num);
LNode p = L->next;
while (p != NULL) {
if (strcmp(p->num, num) == 0) {
printf("请输入新的姓名和学号:");
scanf("%s %s", p->name, p->num);
printf("修改成功!\n");
return;
}
p = p->next;
}
printf("链表中没有找到该节点!\n");
}
// 在链表尾部插入一项
void insert(Linklist *L) {
LNode p = L;
while (p->next != NULL) {
p = p->next;
}
LNode node = (LNode)malloc(sizeof(Linklist));
printf("请输入新节点的姓名和学号:");
scanf("%s %s", node->name, node->num);
p->next = node;
node->next = NULL;
printf("插入成功!\n");
}
// 在链表中删除一项
void del(Linklist *L) {
char num[10];
printf("请输入要删除的节点的学号:");
scanf("%s", num);
LNode p = L->next;
LNode pre = L;
while (p != NULL) {
if (strcmp(p->num, num) == 0) {
pre->next = p->next;
free(p);
printf("删除成功!\n");
return;
}
pre = p;
p = p->next;
}
printf("链表中没有找到该节点!\n");
}
int main() {
Linklist *L;
int i = 255;
L = (LNode)malloc(sizeof(Linklist));
L->next = NULL;
create(L);
while (i != 0) {
printf("\n功能:\n1.输出\t2.修改\t3.删除\t4.插入\t0.退出\n");
scanf("%d", &i);
switch(i) {
case 1:
output(L);
break;
case 2:
update(L);
break;
case 3:
del(L);
break;
case 4:
insert(L);
break;
}
}
return 0;
}
```
请注意,这里的链表是单向链表,每个节点包含了姓名和学号两个信息。在主函数中,我们使用了一个while循环,通过输入数字选择需要进行的操作。其中,create函数用于创建链表,output函数用于输出链表,update函数用于修改链表中的某一项,insert函数用于在链表尾部插入一项,del函数用于在链表中删除一项。
阅读全文