LINUX.ORG.RU

История изменений

Исправление Pinkbyte, (текущая версия) :

pinkbyte@phantom ~/dev $ cat 1.c 
#include <string.h>
#include <stdlib.h>
#include <stdio.h>

int fn(char **dst, char* src, int len) {
        if (len<0)
                return -1;
        *dst=malloc(len+1);
        strncpy(*dst,src,len);
}

int main() {
        char *x;
        fn(&x, "abcde", 2);
        printf("%s\n",x);
        return 0;
}
pinkbyte@phantom ~/dev $ gcc 1.c 
pinkbyte@phantom ~/dev $ ./a.out 
ab

Говнокод, набросанный меньше чем за минуту. Почему говнокод? Потому что выделять память по хорошему надо не в fn, а передавать уже готовый буфер, во избежании утечек при неаккуратном использовании. Ну и проверка результата работы malloc тоже отсутствует - не есть гуд. Однако переписывать мне влом, общий смысл посыла до тебя я думаю дойдет...

Зачем тебе городить огород при наличии стандартной функции копирования строк - я решительно не понимаю

Исправление Pinkbyte, :

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

int fn(char **dst, char* src, int len) {
        if (len<0)
                return -1;
        *dst=malloc(len+1);
        strncpy(*dst,src,len);
}

int main() {
        char *x;
        fn(&x, "abcde", 100500);
        printf("%s\n",x);
        return 0;
}

Говнокод, набросанный меньше чем за минуту. Почему говнокод? Потому что выделять память по хорошему надо не в fn, а передавать уже готовый буфер, во избежании утечек при неаккуратном использовании. Ну и проверка результата работы malloc тоже отсутствует - не есть гуд. Однако переписывать мне влом, общий смысл посыла до тебя я думаю дойдет...

Зачем тебе городить огород при наличии стандартной функции копирования строк - я решительно не понимаю

Исходная версия Pinkbyte, :

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

int fn(char **dst, char* src, int len) {
        if (len<0)
                return -1;
        *dst=malloc(len+1);
        strncpy(*dst,src,len);
}

int main() {
        char *x;
        fn(&x, "abcde", 100500);
        printf("%s\n",x);
        return 0;
}

Говнокод, набросанный меньше чем за минуту. Почему говнокод? Потому что выделять память по хорошему надо не в fn, а передавать уже готовый буфер, во избежании утечек при неаккуратном использовании.

Зачем тебе городить огород при наличии стандартной функции копирования строк - я решительно не понимаю