php+字符串的追加,C字符串追加
C字符串追加
我想附加两个字符串。 我使⽤以下命令:
new_str = strcat(str1, str2);
此命令更改了str1的值。我希望new_str是str1和str2的结合体,同时不要更改str1。
Udara S.S Liyanage asked 2020-08-04T21:42:29Z
10个解决⽅案
61 votes
您还需要分配新空间。 考虑以下代码⽚段:
char * new_str ;
if((new_str = malloc(strlen(str1)+strlen(str2)+1)) != NULL){
new_str[0] = '\0'; // ensures the memory is an empty string
strcat(new_str,str1);
strcat(new_str,str2);
} else {
fprintf(STDERR,"malloc failed!\n");
// exit?
}
您可能要考虑malloc,它稍微安全⼀些。
更新,请参见上⽂。 在C运⾏时的某些版本中,malloc返回的内存未初始化为0。将new_str的第⼀个字节设置为零可确保它看起来像是⼀个空字符串,适合strcat。
Charlie Martin answered 2020-08-04T21:42:53Z
6 votes
请执⾏下列操作:
strcat(new_str,str1);
strcat(new_str,str2);
VirtualTroll answered 2020-08-04T21:43:13Z
1 votes
我编写了⼀个⽀持动态变量字符串附加的函数,例如PHP str append:str + str + ...等。
#include
#include
#include
{
char *str = NULL;
char *old_json = NULL, *new_json = NULL;
va_list arg_ptr;
va_start(arg_ptr, format);
vasprintf(&str, format, arg_ptr);
// save old json
asprintf(&old_json, "%s", (*json == NULL ? "" : *json));
// calloc new json memory
new_json = (char *)calloc(strlen(old_json) + strlen(str) + 1, sizeof(char)); strcat(new_json, old_json);
strcat(new_json, str);
if (*json) free(*json);
*json = new_json;
free(old_json);
free(str);
return 0;
}
int main(int argc, char *argv[])
{
char *json = NULL;
str_append(&json, "name: %d, %d, %d", 1, 2, 3);
str_append(&json, "sex: %s", "male");
str_append(&json, "end");
str_append(&json, "");
str_append(&json, "{\"ret\":true}");
int i;
for (i = 0; i < 10; i++) {
str_append(&json, "id-%d", i);
}
printf("%s\n", json);
if (json) free(json);
Wei answered 2020-08-04T21:43:33Z
1 votes
考虑使⽤功能强⼤但未知的open_memstream()函数。
FILE *open_memstream(char **ptr, size_t *sizeloc);
⽤法⽰例:
// open the stream
FILE *stream;
char *buf;
size_t len;
stream = open_memstream(&buf, &len);
// write what you want with fprintf() into the stream
fprintf(stream, "Hello");
fprintf(stream, " ");
fprintf(stream, "%s\n", "world");
// close the stream, the buffer is allocated and the size is set !
fclose(stream);
printf ("the result is '%s' (%d characters)\n", buf, len);
free(buf);
c++strcpy函数用法如果您事先不知道要追加的内容的长度,那么这⽐管理缓冲区⾃⼰更⽅便和安全。
Christophe Quintard answered 2020-08-04T21:44:01Z
1 votes
然后,您必须先将strncpy str1转换为new_string。
Joel Falcou answered 2020-08-04T21:44:21Z
0 votes
您可以使⽤asprintf将两者连接成⼀个新的字符串:
char *new_str;
asprintf(&new_str,"%s%s",str1,str2);
frmdstryr answered 2020-08-04T21:44:41Z
0 votes
我需要追加⼦字符串来创建ssh命令,并⽤sprintf(Visual Studio 2013)解决了
char gStrSshCommand[SSH_COMMAND_MAX_LEN]; // declare ssh command string strcpy(gStrSshCommand, ""); // empty string
sprintf(gStrSshCommand, "%s %s", gStrSshCommand, substring);
}
Zac answered 2020-08-04T21:45:01Z
0 votes
strcpy(str1+strlen(str1), str2);
Barun Parichha answered 2020-08-04T21:45:16Z
-2 votes
strcat的⼿册页上说arg1和arg2附加到arg1 ..并返回s1的指针。 如果您不想打扰str1,str2,那么您已经编写了⾃⼰的函数。char * my_strcat(const char * str1, const char * str2)
{
char * ret = malloc(strlen(str1)+strlen(str2));
if(ret!=NULL)
{
sprintf(ret, "%s%s", str1, str2);
return ret;
}
return NULL;
}
希望这能解决您的⽬的
maheshgupta024 answered 2020-08-04T21:45:41Z
-3 votes
您可以尝试如下操作:
strncpy(new_str, str1, strlen(str1));
strcat(new_str, str2);
sitnik answered 2020-08-04T21:46:05Z

版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。