Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/arrays/12.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
开始时的困惑 #包括 #包括 int main() { chara[250]; 字符c1[1],c2[1]; int n,i; printf(“给出文本:”); 获得(a); printf(“给出c1:”); 获取(c1); printf(“给出c2:”); 获取(c2); n=strlen(a); 对于(i=0;i_C_Arrays_Char_Fgets - Fatal编程技术网

开始时的困惑 #包括 #包括 int main() { chara[250]; 字符c1[1],c2[1]; int n,i; printf(“给出文本:”); 获得(a); printf(“给出c1:”); 获取(c1); printf(“给出c2:”); 获取(c2); n=strlen(a); 对于(i=0;i

开始时的困惑 #包括 #包括 int main() { chara[250]; 字符c1[1],c2[1]; int n,i; printf(“给出文本:”); 获得(a); printf(“给出c1:”); 获取(c1); printf(“给出c2:”); 获取(c2); n=strlen(a); 对于(i=0;i,c,arrays,char,fgets,C,Arrays,Char,Fgets,首先,使用 最重要的是,当您使用get(c1),c1作为一个单元素数组时,您已经超出了调用的分配内存 也就是说,您将c1和c2作为一个元素数组,它们没有错误,但也不是必需的。将它们定义为简单的char变量 #include <stdio.h> #include <string.h> int main() { char a[250]; char c1[1],c2[1]; int n,i; printf("Give text: "); gets(a); prin

首先,使用

最重要的是,当您使用
get(c1)
c1
作为一个单元素数组时,您已经超出了调用的分配内存

也就是说,您将
c1
c2
作为一个元素数组,它们没有错误,但也不是必需的。将它们定义为简单的
char
变量

#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;
}
像这样使用它们

char c1;
char c2;
在此之后,
a[i]==c2
的检查应该作为
else
构造来进行,否则,您将覆盖上一个操作

 scanf(" %c", &c1);  // mind the space and don't forget to to check the return 
 scanf(" %c", &c2);  // value of scanf() to ensure proper scanning.
对于(i=0;i首先,使用

最重要的是,当您使用
get(c1)
c1
作为一个单元素数组时,您已经超出了调用的分配内存

也就是说,您将
c1
c2
作为一个元素数组,它们没有错误,但也不是必需的。将它们定义为简单的
char
变量

#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;
}
像这样使用它们

char c1;
char c2;
在此之后,
a[i]==c2
的检查应该作为
else
构造来进行,否则,您将覆盖上一个操作

 scanf(" %c", &c1);  // mind the space and don't forget to to check the return 
 scanf(" %c", &c2);  // value of scanf() to ensure proper scanning.
(i=0;i
  • 不应使用
    gets()
    ,因为它有不可避免的缓冲区溢出风险,在C99中已被弃用,并且已从C11中删除
  • c1
    c2
    的缓冲区大小不足
  • 你应该检查读数是否成功
  • 在比较以检索读取的字符之前,应先取消对
    c1
    c2
    的引用
  • 如果
,则应使用
,否则将再次修改修改的字符

试试这个:

for(i=0;i<n;i++)
{
    if(a[i]==c1)
   {
      a[i]=c2;
   }
  else if(a[i]==c2)
   {
    a[i]=c1;
   }
}
#包括
#包括
/*这是一个简单的实现,\n的缓冲区被浪费了*/
char*safer\u获取(char*buf,size\u t size){
char*lf;
if(fgets(buf,size,stdin)==NULL)返回NULL;
如果((lf=strchr(buf,'\n'))!=NULL)*lf='\0';
返回buf;
}
int main()
{
chara[250];
char c1[4],c2[4];/*由于safer_get的实现效率低下,至少需要3个元素*/
int n,i;
printf(“给出文本:”);
if(a,sizeof(a))==NULL)
{
fputs(“读取错误”,stderr);
返回1;
}
printf(“给出c1:”);
if(safer_gets(c1,sizeof(c1))==NULL)
{
fputs(“读取c1错误”,标准);
返回1;
}
printf(“给出c2:”);
if(safer_gets(c2,sizeof(c2))==NULL)
{
fputs(“读取c2错误”,标准指令);
返回1;
}
n=strlen(a);
对于(i=0;i
  • 不应使用
    gets()
    ,因为它有不可避免的缓冲区溢出风险,在C99中已被弃用,并且已从C11中删除
  • c1
    c2
    的缓冲区大小不足
  • 你应该检查读数是否成功
  • 在比较以检索读取的字符之前,应先取消对
    c1
    c2
    的引用
  • 如果
,则应使用
,否则将再次修改修改的字符

试试这个:

for(i=0;i<n;i++)
{
    if(a[i]==c1)
   {
      a[i]=c2;
   }
  else if(a[i]==c2)
   {
    a[i]=c1;
   }
}
#包括
#包括
/*这是一个简单的实现,\n的缓冲区被浪费了*/
char*safer\u获取(char*buf,size\u t size){
char*lf;
if(fgets(buf,size,stdin)==NULL)返回NULL;
如果((lf=strchr(buf,'\n'))!=NULL)*lf='\0';
返回buf;
}
int main()
{
chara[250];
char c1[4],c2[4];/*由于safer_get的实现效率低下,至少需要3个元素*/
int n,i;
printf(“给出文本:”);
if(a,sizeof(a))==NULL)
{
fputs(“读取错误”,stderr);
返回1;
}
printf(“给出c1:”);
if(safer_gets(c1,sizeof(c1))==NULL)
{
fputs(“读取c1错误”,标准);
返回1;
}
printf(“给出c2:”);
if(safer_gets(c2,sizeof(c2))==NULL)
{
fputs(“读取c2错误”,标准指令);
返回1;
}
n=strlen(a);

对于(i=0;i您不应该使用
gets()
,它有不可避免的缓冲区溢出风险,在C99中被弃用并从C11中删除。
gets(c1);
char c1[1]
不好,因为这将只接受零字符+终止空字符。
a[i]=c2;
a[i]=c1;
看起来很奇怪,因为它正在分配从数组转换的指针转换的内容。您想了解C-“string”是如何实现的。定义的C-“string”字符C[1]
只能容纳“emtpy string”:
。请正确地缩进你的代码,至少在把它呈现给全世界阅读之前…:-(我的意思是什么让你“char c1[1],c2[1];??你在另一个生命中是一个吝啬的会计吗?Shtap与豆子计数,而且,正如其他人所指出的那样,[1]很愚蠢:(你不应该使用
get()
,它有不可避免的缓冲区溢出风险,在C99中被弃用并从C11中删除。
获取(c1);
带有
字符c1[1]
是不好的,因为它只接受零字符+终止空字符。
a[i]=c2;
a[i]=c1;
看起来很奇怪,因为它正在分配从数组转换的指针转换的内容。您想了解C-“string”是如何实现的。定义的C-“string”字符C[1]
只能容纳“emtpy string”:
。请至少在向全世界展示您的代码以供阅读之前,正确地缩进您的代码…:-(我的意思是什么让您着迷于“char c1[1],c2[1];??您在另一个生命中是一个吝啬的会计吗?Shtap与豆子计数,而且,[1]是愚蠢的,正如其他人所指出的:(目前,
&c1
的计算结果是
char**
%c
需要一个
char*
@alk-erm…我没有提到
将它们定义为简单的char变量,并像
已经使用过一样使用它们?:)确实,你做到了