两个字符串合并
我现在定义了一个宏#if A #define B “abc” #elif #define B “def” #endif,就是如果满足条件A,宏B就是"abc",如果不满足,宏B就是"def",再定义一个宏C,#define C “tffs/”,现在要把宏B和宏C合并为另外一个宏D,我用#define D strcat(C,B),程序老是出错,请问还有其他方法吗 合并 宏 c
[解决办法]
char* strcat(char* dst, char* src);
dst需要是个可写内存,而你:
#define C "tffs/"
替换后是一个字符常量。
#ifdef __A__
#define __B__ "abc"
#else
#define __B__ "def"
#endif
#define __C__ "tffs/"
#define __D__ string(__B__)+__C__
[解决办法]
#include <string>
#define __D__ std::string(__B__)+__C__
[解决办法]
string在std命名空间的
std::string
或者前面using std::string
或者前面using namespace std;
c++建议用inline函数替代宏,你的情况用函数更容易些吧。
[解决办法]
你好,我的理解是:strcat(char*a,char*b)
表示将字符串b的值追加到字符串a的后面。
你宏定义的B 和C 在编译阶段将代码中引用他们的地方进行了简单的替换,这些替换后的字符串是存储在代码段里,在程序执行期间是无法改变他们的值,你调用strcat(B,C)实际上是在修改B中存储字符串常量的值,所以你已运行就会报“段错误”,把程序杀死。
你可以通过这种方式实现():
#include<iostream>
#include<string.h>
using namespace std;
#define A "abc"
#define B "mnt"
int main(){
char a[20]=A;//a数组的大小要足够大
char b[11]=B;
strcat(a,b);
cout<<a<<endl;
return 0;
}