Shammer's Philosophy

My private adversaria

substring 関数 - 20100926

substring 関数を自作してみた。strlen と sizeof の違い、malloc の時にどのようにサイズを指定するかとか、よくわからない部分も多かったが、とりあえず書いてみた。渡した文字列引数の start 文字目から end 文字目まで返す、という点は確認した。でも end が実際の文字列より多い場合の考慮がされていないけれど。。。それはまた今度。

#include <stdio.h>
#include <stdlib.h>
#include <string.h>

char * substring(const char str[], int s, int e){
    int start = s;
    int end = e;
    int length = end - start;
    if( length < 0 ){
	int temp = start;
	start = end;
	end = temp;
	length = length * -1;
    }
    char * value = (char *)malloc(sizeof(char) * (length + 1));
    int i = 0;
    while( i < length ){
	value[i] = str[start + i];
	i++;
    }
    value[length] = '\0';
    return value;
}

int main(int argc, char * args[]){
    char * v1 = substring(args[1], 0, 3);
    char * v2 = substring(args[1], 3, 1);
    printf("substring(args[1], 0, 3) is v1, v1 value is %s, strlen(v1) is %zd, sizeof(v1) is %lu.\n", v1, strlen(v1), sizeof(v1));
    printf("substring(args[1], 3, 1) is v2, v2 value is %s, strlen(v2) is %zd, sizeof(v2) is %lu.\n", v2, strlen(v2), sizeof(v2));
    free(v1);
    free(v2);
    return 0;
}