【发布时间】:2016-10-04 14:03:16
【问题描述】:
#include <stdio.h>
#include <string.h>
int main()
{
char a[250];
char c1[1],c2[1];
int n,i;
printf("Give text: ");
gets(a);
printf("Give c1: ");
gets(c1);
printf("Give c2: ");
gets(c2);
n=strlen(a);
for(i=0;i<n;i++)
{
if(a[i]==c1)
{
a[i]=c2;
}
if(a[i]==c2)
{
a[i]=c1;
}
}
printf("%s",a);
return 0;
}
在文本中,我需要将c1 与c2 切换并反转,
但是当我在给出c1,c2 之后启动程序时,什么也没发生。
我哪里错了?
【问题讨论】:
-
你不应该使用
gets(),它有不可避免的缓冲区溢出风险,在C99中已弃用并从C11中删除。 -
gets(c1);和char c1[1]不好,因为它只接受零个字符 + 终止空字符。a[i]=c2;和a[i]=c1;看起来很奇怪,因为它正在分配从数组转换的指针转换的内容。 -
您想了解 C-"string" 是如何实现的。定义为
char c[1]的 C-“字符串”只能包含“emtpy 字符串”:""。 -
请正确缩进您的代码,至少在将其呈现给全世界阅读之前... :-(
-
我的意思是'char c1[1],c2[1]; ???你是另一种生活中的小气会计吗?用 bean-counting 敲击,除此之外,[1] 无论如何都是愚蠢的,正如其他人指出的那样:(