/*调用merge函数,实现将指针s所指的字符串的反序和正序连接*/ #include<stdio.h> #include<string.h> int main() { char str[100]; void merge(char *s);//声明要调用的函数 printf("Please enter a string:"); gets(str); merge(str); printf("Inverted and connecting after:"); puts(str); return 0; } void merge(char *s) { char *p,*q; int n = strlen(s);//n为指针s指向的串的长度 for(p=s+n-1,q=s+n;p>=s;p--,q++) *q=*p;//反序存放 for(p=s,q=s+n*2-1;p<s+n;p++,q--) *q=*p;//正序存放 *(q+1)='\0'; //添加字符串结束标记 }这个需要修改澳门?
时间: 2024-02-15 12:01:31 浏览: 85
一个字符串反转函数可实现字符串倒序
这个程序本身是可以运行的,但是使用了不安全的函数gets。gets函数无法保证输入的字符串长度不会超过数组的长度,因此存在缓冲区溢出的风险。推荐使用fgets函数来代替gets函数,可以指定输入的最大长度,避免了缓冲区溢出的问题。修改后的代码如下:
```
#include<stdio.h>
#include<string.h>
int main() {
char str[100];
void merge(char *s); //声明要调用的函数
printf("Please enter a string:");
fgets(str, 100, stdin); //使用fgets代替gets
merge(str);
printf("Inverted and connecting after:");
puts(str);
return 0;
}
void merge(char *s) {
char *p,*q;
int n = strlen(s); //n为指针s指向的串的长度
for(p=s+n-1,q=s+n;p>=s;p--,q++)
*q=*p; //反序存放
for(p=s,q=s+n*2-1;p<s+n;p++,q--)
*q=*p; //正序存放
*(q+1)='\0'; //添加字符串结束标记
}
```
另外,如果输入的字符串包含空格,程序输出的结果会不太友好,可以使用scanf函数来代替fgets和gets,但需要注意格式化字符串的使用。
阅读全文