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

#include

int str_append(char **json, const char *format, ...)

{

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);

return 0;

}

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);

如果您事先不知道要追加的内容的长度,那么这比管理缓冲区自己更方便和安全。

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

void appendSshCommand(const char *substring) // append substring

{

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);

有关strncpy的更多信息:[http://www.cplusplus.com/reference/clibrary/cstring/strncpy/]

sitnik answered 2020-08-04T21:46:05Z

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值