c语言编程中字符串复制函数编程程序出现错误,这是怎么回事?

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了c语言编程中字符串复制函数编程程序出现错误,这是怎么回事?相关的知识,希望对你有一定的参考价值。

strcpy函数好像错了,怎么改?

这里原因是gets函数不安全,visual studio的后续产品已经不再支持此类函数,可以换成fgets(str1, sizeof(str1), stdin);
第一个参数是,字符存储地址,第二个是最大内存大小,第三个是从哪里读取,stdin是从键盘,也可以是文件指针表示从文件中读取。
其实strcpy出现提示也是不安全的,可以考虑使用strncpy函数。

以下是扩展资料

C语言gets函数,fgets函数的使用
  
gets从标准输入设备读字符串函数。可以无限读取,不会判断上限,以回车结束读取。函数的具体功能如下所示:从stdin流中读取字符串,直至接受到换行符或EOF时停止,并将读取的结果存放在buffer指针所指向的字符数组中。换行符不作为读取串的内容,读取的换行符被转换为‘\0’空字符,并由此来结束字符串。

使用gets函数的时候应注意以下要素:可以无限读取,不会判断上限,所以程序员应该确保buffer的空间足够大,以便在执行读操作时不发生溢出。如果溢出,多出来的字符将被写入到堆栈中,破坏一个或多个不相关变量的值。
这个事实导致gets函数只适用于玩具程序,为了避免这种情况,我们可以用fgets(stdin) 读取标准输入来替换gets()。为了向后兼容,gets删除换行符,gets并不将换行符存入缓冲区。

fgets函数用来从文件中读入字符串。fgets函数的调用形式如下:fgets(str,n,fp);此处,fp是文件指针;str是存放在字符串的起始地址;n是一个int类型变量。函数的功能是从fp所指文件中读入n-1个字符放入str为起始地址的空间内;如果在未读满n-1个字符之时,已读到一个换行符或一个EOF(文件结束标志),则结束本次读操作,读入的字符串中最后包含读到的换行符。因此,确切地说,调用fgets函数时,最多只能读入n-1个字符。读入结束后,系统将自动在最后加'\0',并以str作为函数值返回。原型是char *fgets(char *s, int n, FILE *stream);

同时注意scanf函数和gets函数混用时的注意事项:

1、gets在scanf前调用,这种调用一般不会出现什么问题,可以正常输入。

2、scanf在gets前调用,这种情况就会出现问题,当输入完scanf中的变量时,运行到gets函数,则不让输入任何字符,出现此问题的原因是gets函数接收了scanf输入完后的回车符,解决的办法是在scanf和gets中间,用getchar函数接收掉回车符,这样就不会出现任何问题了。
参考技术A 这是CPP工程,头文件你得改成
#include"stdio.h"
#include"string.h"
如果是#include<string>就是调用C++的库
参考技术B 这是因为vc++的默认标准和gcc(一般老师教的c语言)不一样
建议你换dev c++ 、 codeblocks这种默认gcc的ide试试
参考技术C 请作以下修改试试?
第8行要改为:
gets_s(str1,30);
第16行要改为:
strcpy_s(str1,30,str2);本回答被提问者和网友采纳

c语言编程:编写程序,实现文本文件的复制。从一个文件中逐个字符输出,将其中的小写字母转换成大写字母

c语言编程:编写程序,实现文本文件的复制。从一个文件中逐个字符输出,将其中的小写字母转换成大写字母,其他符号不变,并输出到磁盘文件file.txt。
要求:①能打开和关闭文件;
②对打开的文件进行读写操作;
③对读入的文件进行逐个字符处理。

#include<stdio.h>
void main()
int c;
FILE *fp,*tp;
char fname1[]= "f.txt" ,fname2[]= "file.txt" ,cc;
if ( fp=fopen(fname1,"r") )
if ( tp=fopen(fname2,"w+") )
while ( 1 )
c=fgetc(fp); if ( c==EOF ) break;
cc=c; if ( (cc>='a')&&(cc<='z') ) cc=cc-'a'+'A';
fputc(cc,tp);

fclose(tp);
else printf("无法建立文件%s\n",fname2);
fclose(fp);
else printf("无法打开文件%s\n",fname1);
参考技术A #include<stdio.h>
int main()
char c;
FILE *fp1,*fp2;
fp1=fopen("0.txt","r");
fp2=fopen("00.txt","w");
while(!feof(fp1))
c=fgetc(fp1);
if(c>='a'&&c<='z')c-=32;
fputc(c,fp2);

fclose(fp1);
fclose(fp2);
return 0;

以上是关于c语言编程中字符串复制函数编程程序出现错误,这是怎么回事?的主要内容,如果未能解决你的问题,请参考以下文章

c语言编程中出现的纠错英文语句是什么意思?

用函数编程实现计算字符串中子串出现的次数,这个程序不知道错哪了

为啥在网上找的一些c语言程序的代码在vc++6.0中编译总是出现错误?求指教

c语言编程为啥会出现Undefined symbol 错误

C语言里, 一个函数怎调用,另一个函数的变量(不用返回)

2. 用一个函数来实现将一行字符串中最长的单词输出。此行字符从主函数传递给该函数。C语言高手快出现