#include <stdio.h> int main() { char a[30],b[30],*p1,*p2; printf("请输入字符串到 a 中:"); gets(a); printf("请输入字符串到 b 中:"); gets(b); for(p1=a; ;p1++) //使用循环,移动指针变量 p1,使其指向字符串尾部 ; for(p2=b;* ; )//使用循环,逐个字符复制,达到字符串复制效果 *p1='\0'; //加截字符串技术标志 printf("\n 复制后的 a 串中为:%s\n",a); //输出字符串 a printf("复制后的 b 串中为:%s\n",b); //输出字符串 b return 0; }
时间: 2024-03-10 09:47:03 浏览: 42
这段程序存在几个问题。首先,循环中的条件没有被正确设置,导致程序会一直循环下去,无法停止。其次,在字符串复制的循环中,指针变量p2没有被正确移动,导致复制的结果不正确。
下面是修改后的程序:
```c
#include <stdio.h>
#include <string.h>
int main() {
char a[30], b[30], *p1, *p2;
printf("请输入字符串到 a 中:");
fgets(a, 30, stdin);
printf("请输入字符串到 b 中:");
fgets(b, 30, stdin);
p1 = a + strlen(a);
for (p2 = b; *p2 != '\0'; p1++, p2++) {
*p1 = *p2;
}
*p1 = '\0';
printf("\n复制后的 a 串中为:%s\n", a);
printf("复制后的 b 串中为:%s\n", b);
return 0;
}
```
这个程序使用了字符串长度函数`strlen()`来确定指针变量p1的位置。在复制字符串的循环中,使用了两个指针变量p1和p2,它们分别指向字符串a和字符串b的当前位置。每次循环,都将p2指向的字符复制到p1指向的位置,并将p1、p2移动到下一个位置。最后,使用加截字符串技术标志`\0`来表示字符串的结尾。
相关问题
# include<stdio.h> # include<signal.h> # include<unistd.h> void waiting(); void stop(); int main(void) { int p1, p2; signal(SIGINT,stop); while((p1=fork())= =-1); if(p1>0)
{
while((p2=fork())==-1);
if(p2>0)
{
waiting(); // 等待子进程结束
kill(p2, SIGKILL); // 终止子进程p2
}
else if(p2==0)
{
execl("/bin/sh", "sh", "-c", "echo child process 2; exit 0", (char*)0);
}
}
else if(p1==0)
{
execl("/bin/sh", "sh", "-c", "echo child process 1; exit 0", (char*)0);
}
return 0;
}
void waiting()
{
printf("Waiting for child processes to finish...\n");
sleep(5);
}
void stop()
{
printf("Received SIGINT signal, terminating all child processes...\n");
kill(0, SIGKILL); // 终止所有进程组
}
这是一个简单的在Linux系统下使用fork实现多进程的程序,并且在父进程接收到SIGINT信号时,终止所有子进程的程序段。
练习-输入一批字符串,将字符串按从小到大的顺序排序并且输出#include <stdio.h> #include<string.h> #define M 100 #define N 80 void inputarr (char array[ ][N] , int n); void sortstr (char array[ ] [N] , int n); void outputarr (char array[ ] [N] , int n); void swap(char *p1,char *p2);
好的,这是一个字符串排序的问题,我会帮助你解决它。下面是代码实现:
```c
#include <stdio.h>
#include <string.h>
#define M 100
#define N 80
void inputarr (char array[][N], int n);
void sortstr (char array[][N], int n);
void outputarr (char array[][N], int n);
void swap(char *p1, char *p2);
int main()
{
char array[M][N];
int n;
printf("请输入字符串的个数:");
scanf("%d", &n);
inputarr(array, n); // 输入字符串
sortstr(array, n); // 排序
outputarr(array, n); // 输出排序后的字符串
return 0;
}
// 输入字符串
void inputarr(char array[][N], int n)
{
printf("请输入%d个字符串:\n", n);
for (int i = 0; i < n; i++)
{
scanf("%s", array[i]);
}
}
// 排序
void sortstr (char array[][N], int n)
{
for (int i = 0; i < n - 1; i++)
{
for (int j = 0; j < n - i - 1; j++)
{
if (strcmp(array[j], array[j + 1]) > 0)
{
swap(array[j], array[j + 1]);
}
}
}
}
// 输出字符串
void outputarr (char array[][N], int n)
{
printf("排序后的字符串为:\n");
for (int i = 0; i < n; i++)
{
printf("%s\n", array[i]);
}
}
// 交换两个指针指向的字符串
void swap(char *p1, char *p2)
{
char temp[N];
strcpy(temp, p1);
strcpy(p1, p2);
strcpy(p2, temp);
}
```
你可以将此代码复制到你的本地编译器上运行,输入字符串并按从小到大的顺序排序,然后输出排序后的结果。
阅读全文