Shammer's Philosophy

My private adversaria

文字列の連結-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 とかと同じように書式を指定して連結することができる。