文字列の連結-snprintf_ver2
文字列の連結-snprintf_ver1 - Shammerismの問題を修正。
#include <stdio.h> #include <stdlib.h> #include <string.h> char * returnString(char * v){ char * prefix = "[RES]"; int length = strlen(prefix) + strlen(v) + 1;// 1 is for '\0' char * response = (char *)malloc(length); snprintf(response, length, "%s%s", prefix, v); return response; } int main(int argc, char * args[]){ char * v1 = "0123456789"; char * v2 = returnString(v1); printf("v1 value is %s.\n", v1); printf("v2 value is %s.\n", v2); printf("v1 address is %p.\n", v1); printf("v2 address is %p.\n", v2); free(v2); return 0; }
ヒープを確保するとき、サイズは 8 になってしまうようで、snprintf に必要な文字数を明示的に渡さないとうまくいかなかった。なので、
snprintf(response, sizeof(response), "%s%s", prefix, v);
とはなっていない。snprintf は、"%s%s" の部分が強力。printf とかと同じように書式を指定して連結することができる。