关于strcat的低级错误
strcat函数的一般形式
为: strcat(字符数组1,字符数组2)
strcat函数的定义
为:把两个字符数组中的字符串连接起来,把字符串2接到字符串1的后面,结果放在字符数组1中,函数调用后得到一个函数值——字符数组1的地址
低级错误的产生
本人编写用控制台显示二值化图片的程序后,考虑到将来使用时含图片的文本文档过多,如果全放置于于程序相同的路径中,会过于复杂。于是想要修改原程序,使其能够打开不同路径的文件。而这也是错误产生的原因
下图便是含有错误的代码:
#include<stdio.h>
#include<stdlib.h>
#include<string.h>
int main()
{
FILE *fp;
int ch,i=0,j=0;
char filename[10]={'w'},filename1[10];
printf("请输入文件序号:");
scanf("%s",filename1);
getchar();
strcat(filename1,".txt");
while(filename1[j]!='\0')
filename[++i]=filename1[j++];
strcat("C:\\Users\\Administrator\\Desktop\\1\\1\\新图像\\",filename);
if((fp=fopen(filename,"r"))==NULL)
{
printf("无法打开");
exit(0);
}
ch=fgetc(fp);
i=0;
while(!feof(fp))
{
i++;
putchar(ch);
if(i%80==0)fgetc(fp);
ch=fgetc(fp);
}
fclose(fp);
system("pause");
return 0;
}
将filename里的数值赋予常量,而后面输出又引用的filename,导致路径错误。这个错误非常低级,但因为是在原有程序的基础上进行修改,导致原本正确的语句出错(原本引用strcat时没有出错)
错误的解决
实际上这个错误非常低级,以至于改错也相当容易
如下:
#include<stdio.h>
#include<stdlib.h>
#include<string.h>
int main()
{
FILE *fp;
int ch,i=0,j=0;
char filename[10]={'w'},filename1[10];
char s[100]={"C:\\Users\\Administrator\\Desktop\\1\\1\\新图像\\"};
printf("请输入文件序号:");
scanf("%s",filename1);
getchar();
strcat(filename1,".txt");
while(filename1[j]!='\0')
filename[++i]=filename1[j++];
strcat(s,filename);
if((fp=fopen(s,"r"))==NULL)
{
printf("无法打开");
exit(0);
}
ch=fgetc(fp);
i=0;
while(!feof(fp))
{
i++;
putchar(ch);
if(i%80==0)fgetc(fp);
ch=fgetc(fp);
}
fclose(fp);
system("pause");
return 0;
}
给含有路径信息的常量一个单独的变量s用于储存,那么引用strcat之后,变量储存了正确完整的路径,也可以在之后的语句中被引用