C string append

匿名 (未验证) 提交于 2019-12-03 08:41:19

问题:

I want to append two strings. I used the following command:

new_str = strcat(str1, str2); 

This command changes the value of str1. I want new_str to be the concatanation of str1 and str2 and at the same time str1 is not to be changed.

回答1:

You need to allocate new space as well. Consider this code fragment:

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? } 

You might want to consider strnlen(3) which is slightly safer.

Updated, see above. In some versions of the C runtime, the memory returned by malloc isn't initialized to 0. I believe the newer C spec actually requires malloc to do so, but just in case, setting the first byte of new_str to zero ensures that it looks like an empty string to strcat.



回答2:

do the following:
strcat(new_str,str1);
strcat(new_str,str2);



回答3:

You'll have to strncpy str1 into new_string first then.



回答4:

I write a function support dynamic variable string append, like PHP str append: str + str + ... etc.

#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 


回答5:

You could use asprintf to concatenate both into a new string:

char *new_str; asprintf(&new_str,"%s%s",str1,str2); 


回答6:

I needed to append substrings to create an ssh command, I solved with 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); } 


回答7:

Consider using the great but unknown open_memstream() function.

FILE *open_memstream(char **ptr, size_t *sizeloc);

Example of usage :

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

If you don't know in advance the length of what you want to append, this is convenient and safer than managing buffers yourself.



回答8:

strcpy(str1+strlen(str1), str2); 


回答9:

man page of strcat says that arg1 and arg2 are appended to arg1.. and returns the pointer of s1. If you dont want disturb str1,str2 then you have write your own function.

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

Hope this solves your purpose



回答10:

You can try something like this:

strncpy(new_str, str1, strlen(str1)); strcat(new_str, str2); 

More info on strncpy: http://www.cplusplus.com/reference/clibrary/cstring/strncpy/



文章来源: C string append
易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!