标题:请教,关于使用 C 风格字符串中的 strcat()的问题。
只看楼主
ClarenceC
Rank: 2
等 级:论坛游民
帖 子:54
专家分:18
注 册:2014-1-10
结帖率:87.5%
 问题点数:0 回复次数:18 
请教,关于使用 C 风格字符串中的 strcat()的问题。
#include <iostream>
#include <cstring>
using namespace std;
int main()
{
    char *cha1="zhong";
    char *cha2="xiaogang";
    size_t len=strlen(cha1)+strlen(cha2);//计算出两个c风格字符串的长度
    char *p=new char[len+1];
    strcat(p,cha1);//将cha1接到动态数组中
    return 0;
}
      为什么编译时出错了?
搜索更多相关主题的帖子: include return 字符串 zhong 风格 
2014-05-21 17:37
zklhp
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
来 自:china
等 级:贵宾
威 望:254
帖 子:11485
专家分:33241
注 册:2007-7-10
得分:0 
我这里没错 不知道你用的什么编译器 出的什么错
2014-05-21 17:55
晴天月
Rank: 1
等 级:新手上路
帖 子:2
专家分:0
注 册:2014-5-19
得分:0 
你用的是VC6.0?VC2010上可以
2014-05-21 17:56
rjsp
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
等 级:版主
威 望:507
帖 子:8890
专家分:53117
注 册:2011-1-18
得分:0 
strcat(p,cha1);
要求
a. p是一个'\0'结尾的字符串
b. cha1是一个'\0'结尾的字符串
c. p指向的有效内存能容纳得下 p并上cha1

你的代码不符合必要条件a
除非
char *p=new char[len+1];
p[0] = '\0';
strcat(p,cha1);
或者
char *p=new char[len+1];
strcpy(p,cha1);
2014-05-22 08:15
rjsp
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
等 级:版主
威 望:507
帖 子:8890
专家分:53117
注 册:2011-1-18
得分:0 
不好意思,没看清题目中的“为什么编译时出错了?”
按标准,这段代码无任何语法错误(逻辑错误不是编译器的事儿),因此用任何符合C++标准的编译器都不应该会出现编译错误。

用VC,没有编译错误,只有编译警告:warning C4996: 'strcat': This function or variable may be unsafe. Consider using strcat_s instead.
这是VC瞎鸡巴扯蛋,根本不用理

用g++,没有编译错误,只有编译警告:deprecated conversion from string constant to 'char*'
C++标准规定,这种为了兼容旧代码而作让步的特例,由程序员自己负责。编译器不能认为它错,是否警告标准不管,即 VC不给出警告 和 gcc给出警告 都是符合C++标准的。

总之,不可能出现“编译时出错”,只能出现“编译警告”和“运行错误”。
2014-05-22 08:27
ClarenceC
Rank: 2
等 级:论坛游民
帖 子:54
专家分:18
注 册:2014-1-10
得分:0 
回复 4 楼 rjsp
  您好,我用的是vs2012。我在点调试时弹出了这个“发生生成错误”提示框。还有这个“
1>          c:\program files (x86)\microsoft visual studio 11.0\vc\include\string.h(115) : 参见“strcat”的声明
========== 生成: 成功 0 个,失败 1 个,最新 0 个,跳过 0 个 ==========”
请问是怎么回事呢?
2014-05-23 10:32
ClarenceC
Rank: 2
等 级:论坛游民
帖 子:54
专家分:18
注 册:2014-1-10
得分:0 
回复 2 楼 zklhp
您好,我用的是vs2012。我在点调试时弹出了这个“发生生成错误”提示框。还有这个“
1>          c:\program files (x86)\microsoft visual studio 11.0\vc\include\string.h(115) : 参见“strcat”的声明
========== 生成: 成功 0 个,失败 1 个,最新 0 个,跳过 0 个 ==========”
请问是怎么回事呢?
2014-05-23 10:33
rjsp
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
等 级:版主
威 望:507
帖 子:8890
专家分:53117
注 册:2011-1-18
得分:0 
回复 6 楼 ClarenceC
贴出错误信息,假如你不知道什么是错误信息的话,把所有信息都贴出来,别只贴无用的信息。
2014-05-23 20:32
ClarenceC
Rank: 2
等 级:论坛游民
帖 子:54
专家分:18
注 册:2014-1-10
得分:0 
回复 8 楼 rjsp
  谢谢您的提醒。但确实就是那个,无它。
2014-05-24 20:45
一根牙签
Rank: 2
等 级:论坛游民
帖 子:7
专家分:13
注 册:2014-5-21
得分:0 
语法上没问题,VC6 编译通过;
用法上有个问题。

#include <iostream>
#include <cstring>
using namespace std;
int main()
{
    char *cha1="zhong";
    char *cha2="xiaogang";
    size_t len=strlen(cha1)+strlen(cha2);
    char *p=new char[len+1];
    strcpy(p,cha2); //是不是少了这句呢?否则你后面的接法没有意义
    strcat(p,cha1);
    cout<<p<<endl;
    return 0;
}
2014-05-24 21:38



参与讨论请移步原网站贴子:https://bbs.bccn.net/thread-431869-1-1.html




关于我们 | 广告合作 | 编程中国 | 清除Cookies | TOP | 手机版

编程中国 版权所有,并保留所有权利。
Powered by Discuz, Processed in 0.556898 second(s), 7 queries.
Copyright©2004-2024, BCCN.NET, All Rights Reserved