关于VC++6.0中的字符串拼接函数strcat

原型:extern char *strcat(char *dest,char *src);
头文件:#include <string>

功能:把src所指字符串添加到dest结尾处(覆盖dest结尾处的'\0')并添加'\0'。
说明:src和dest所指内存区域不可以重叠且dest必须有足够的空间来容纳src的字符串,返回指向dest的指针。

 

举例说明:

#include<stdio.h>
#include<string>
int main()
{
 printf("hello,world");
 char* command = (char*)malloc(150*sizeof(char));  //分配空间

    command = strcat(command,"mp4info "); 
    command = strcat(command,"Alice.mp4 ");
    command = strcat(command," >temp");
    puts(command);           //将command显示在控制台窗口
    system(command);         //执行command中的命令
 return 0;
}

说明:上述代码中的mp4info为一个控制台应用程序,用于解析mp4文件的信息,并将信息输出到temp中。

问题描述:上述代码在编译连接时没有报错,但是运行时出现下面的错误

上述代码表面上看没有错误,但其中隐含有系统默认的错误或者程序员在编写代码时没有养成良好的习惯而形成的错误,从输出的那一长串屯屯屯屯..........”来看,应该是系统为command分配的空间中填入了一些默认值,而strcat函数的功能实际上是从command数组第0位开始依次查找直到找到第一个'\0'字符,然后将src所指字符串添加到dest结尾处(覆盖dest结尾处的'\0')并添加'\0'。而最后的内存不能为读错误,应该是command越界了。

下面的代码可以验证:

#include<stdio.h>
#include<string>

int main()
{
	printf("hello,world \n");
	char* command = (char*)malloc(150*sizeof(char));  //分配空间

	printf("command[0] = %c \n",command[0]);
	return 0;
}

下图为输出结果

从上面的代码中可以看到系统为command[0]默认分配了字符'?'

为了修正上面的问题,其实解决方法很简单,就是为刚分配的空间字符做清零初始化。

代码如下:

#include<stdio.h>
#include<string>


int main()
{
	printf("hello,world \n");
	char* command = (char*)malloc(150*sizeof(char));  //分配空间

	memset(command,0,150*sizeof(char));   //初始化

	      command = strcat(command,"mp4info ");      
		  command = strcat(command,"Alice.mp4 ");
		  command = strcat(command," >temp");
		  puts(command);           //将command显示在控制台窗口
		  system(command);         //执行command中的命令
	return 0;
}
下面为正确输出结果:

开发笔记:

1.在编写程序时应该养成良好的习惯,比如本文中的在使用每一个自定义变量前一定要为其赋予初始值,这样可以避免很多隐性的错误。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值