【C言語】
文字列連結には
strcpyとstrcatより
sprintfを使おう


strcpy+strcatをダラダラ書く

void strcpy_cat(char *buf,char *argv[]){
    strcpy(buf,"/");
    strcat(buf,argv[1]);
    strcat(buf,"/");
    strcat(buf,argv[2]);
    strcat(buf,"/");
    strcat(buf,"file");
}

編集後のイメージがわかりにくいです。


sprintfで1行で書く

void Sprintf(char *buf,char *argv[]){
    sprintf(buf,"/%s/%s/file",argv[1],argv[2]);
}

編集後のイメージがつかみやすいです。


まとめ(コンパイル可能)

#include <stdio.h>
#include <stdlib.h>
#include <string.h>
//strcpy+strcatをダラダラ書く
void strcpy_cat(char *buf,char *argv[]){
    strcpy(buf,"/");
    strcat(buf,argv[1]);
    strcat(buf,"/");
    strcat(buf,argv[2]);
    strcat(buf,"/");
    strcat(buf,"file");
}

//sprintfで1行で書く
void Sprintf(char *buf,char *argv[]){
    sprintf(buf,"/%s/%s/file",argv[1],argv[2]);
}

int main(int argc,char *argv[]){
    if(argc != 3){
        perror("Usage:./a.out root home\n");
        exit(1);
    }
    char    stra[1024];
    char    strb[1024];
    strcpy_cat(stra,argv);
    Sprintf(strb,argv);
    if(strcmp(stra,strb) == 0){
        fprintf(stdout,"同じ結果になる\n");
    } else {
        fprintf(stderr,"ここに来たらバグ\n");
    }
    puts(stra);
    puts(strb);
}

実行結果

./a.out  root home
同じ結果になる
/root/home/file
/root/home/file