![]() |
1
322
在C语言中,“字符串”只是简单的
你可以使用
这里是一个 example from cplusplus.com :
对于第一个参数,需要提供目标缓冲区本身。目标缓冲区必须是字符数组缓冲区。例如。:
确保
第一个参数有足够的空间来存储您试图复制到其中的内容。如果您可以使用,使用以下功能更安全:
注释 :字符串文字不能用作缓冲区,因为它是常量。因此,您总是需要为缓冲区分配一个char数组。
的返回值
所以你的问题可以解决如下:
|
![]() |
2
221
|
![]() |
3
23
各位,使用STR
n
()
n
(或)
n
Primff()。
|
![]() |
4
17
此外,如果您不知道提前连接了多少字符串,malloc和realloc也很有用。
|
![]() |
5
14
字符串也可以在编译时连接起来。
|
![]() |
6
5
不要忘记初始化输出缓冲区。strcat的第一个参数必须是以空结尾的字符串,并为结果字符串分配足够的额外空间:
|
![]() |
7
4
strcat()的第一个参数需要能够为连接的字符串保留足够的空间。因此,分配一个有足够空间接收结果的缓冲区。
strcat()将第二个参数与第一个参数连接起来,并将结果存储在第一个参数中,返回的char*只是第一个参数,而且只是为了方便起见。 您不会得到一个新分配的字符串,第一个参数和第二个参数连接在一起,我想您应该根据代码来获得这个字符串。 |
![]() |
8
4
正如人们指出的那样,弦的处理提高了很多。因此,您可能想学习如何使用C++字符串库而不是C样式字符串。然而这里有一个纯C的解
我不确定它是否正确/安全,但是现在我找不到一个更好的方法来在ANSIC中这样做。 |
![]() |
9
4
在缓冲区大小不受限制的情况下,最好的方法是使用asprintf()。
|
![]() |
10
3
试图修改字符串文字是未定义的行为,这类似于:
将尝试执行。它会试图在
试试这个。它实现了你看起来想要做的事情:
这将创建一个缓冲区, 是 允许修改,然后将字符串文本和其他文本复制到它。小心缓冲区溢出。如果您控制输入数据(或者在手之前检查它),可以像我一样使用固定长度的缓冲区。 否则,您应该使用缓解策略,例如从堆中分配足够的内存,以确保可以处理它。换句话说,比如:
|
![]() |
11
2
您可以编写自己的函数,该函数与
如果两个字符串的长度都超过1000个字符,它将以1000个字符的长度剪切字符串。您可以更改
|
![]() |
12
1
假设您有一个字符[固定的\大小]而不是一个字符*,那么您可以使用一个单独的、有创意的宏同时使用
|
![]() |
13
1
|
![]() |
14
1
您试图将字符串复制到静态分配的地址中。你需要进入缓冲区。 明确地: ……剪断… 目的地
……剪断… http://www.cplusplus.com/reference/clibrary/cstring/strcat.html 这里也有一个例子。 |
![]() |
15
1
如果您有C方面的经验,您会注意到字符串只是最后一个字符为空字符的字符数组。
现在这非常不方便,因为您必须找到最后一个字符才能附加一些内容。
所以strcat在第一个参数中搜索空字符。然后,它将用第二个参数的内容替换它(直到以空结尾)。 现在让我们检查一下您的代码:
在这里,您要向指向文本“text”的指针添加一些内容(“text”的类型是const char*)。一个指针。 这通常行不通。另外,修改“文本”数组也不会起作用,因为它通常被放置在一个常量段中。
这可能会更好,除非您再次尝试修改静态文本。strcat没有为结果分配新内存。 我建议改为这样做:
阅读以下文件:
现在重要的一点是: 确保缓冲区有足够的空间容纳文本和空字符。有几个功能可以帮助您,例如strncat和为您分配缓冲区的printf的特殊版本。 不确保缓冲区大小将导致内存损坏和可远程利用的错误。 |
![]() |
16
0
这是我的解决方案
但您需要指定要连接多少个字符串
|
![]() |
17
-1
尝试类似的方法:
|
![]() |
Ben · 统计向量中的单词在字符串中出现的频率 3 月前 |
![]() |
bear_525 · 从列中删除中间名和首字母,并保存在单独的列中 5 月前 |
![]() |
asdfadf · 为什么具有相同内存值的字符串和整数打印方式不同? 5 月前 |
![]() |
user764754 · 防止多行原始字符串文字中出现新行字符 5 月前 |
![]() |
Bogaso · 从列表中返回与模式匹配的元素 5 月前 |
![]() |
Jasco · 如何使用VBA提取两个相似字符之间的字符串中的单词? 5 月前 |