它什么都不打印。我认为问题出在char *类型,但我不知道是否以及为什么。
&.
答案 0 :(得分:1)
strcat
修改destination
参数缓冲区but a
's buffer is in read-only memory as it's a string literal。
解决方案是在运行时创建缓冲区并将其用作缓冲区。当然,您需要先将a
复制到其中。
char* a = "1234567890";
char* b = "abcdefghij";
size_t aLen = strlen( a );
char* combined = malloc( sizeof(char) * ( strlen(a) + strlen(b) + 1 ) );
strcpy_s( combined, aLen, a ); // always use _s versions of string/buffer functions!
strcat( combined, b );
puts( combined );
free( combined );
或者在C99中,我们可以使用预先初始化的堆栈分配数组(并预先分配足够大)。堆栈数组,包括预先初始化的堆栈数组,可以将其缓冲区写入:
char a[100] = "1234567890";
strcat( a, "abcdefghij" );
puts( a );
答案 1 :(得分:0)
你不能把字符串字符串作为目标。使用数组作为dest缓冲区
char str[30] = "Ala ";
const char *strFrom = "ma kota";
strcat (str, strFrom);
编辑:扩展答案
看看如何编译字符串文字: https://godbolt.org/g/hZuR1o
数组缓冲区是内联定义的,它的值是在执行期间构造的,位于堆栈中。因此缓冲区本身可以自由修改。
如果你动态分配它(使用malloc或calloc),你就会得到一个指向堆上缓冲区的指针,也可以修改它。
另一方面,字符串文字落在只读存储器区域中,并且在各种实例之间共享,因为它们无论如何都是只读的。这就是它的设计方式,男人:)