#include <stdlib.h> #include <string.h> char *my_strdup_1(const char *str) { const size_t len = strlen(str) + 1; char * const res = malloc(len); if (!res) return (NULL); memcpy(res, str, len); return res; } char *my_strdup_2(const char *str) { const size_t len = strlen(str) + 1; char * const res = malloc(len); if (!res) return (NULL); memcpy(res, str, len); return res; }
- #include <stdlib.h>
- #include <string.h>
- char *my_strdup_1(const char *str) {
const size_t len = strlen(str);char *const res = malloc(len); // <- BUG- const size_t len = strlen(str) + 1;
- char * const res = malloc(len);
- if (!res)
- return (NULL);
- memcpy(res, str, len);
- return res;
- }
- char *my_strdup_2(const char *str) {
const size_t len = strlen(str);char *const res = malloc(len); // <- BUGmemcpy(res, str, len + 1);- const size_t len = strlen(str) + 1;
- char * const res = malloc(len);
- if (!res)
- return (NULL);
- memcpy(res, str, len);
- return res;
- }
#include <criterion/criterion.h> #include <stdlib.h> char *my_strdup_1(const char *str); char *my_strdup_2(const char *str); Test(my_strdup_1, should_work_correctly) { static const char str[] = "Qwerty"; char * const res = my_strdup_1(str); cr_assert_str_eq(res, str); free(res); } Test(my_strdup_2, should_work_correctly) { static const char str[] = "Qwerty"; char *const res = my_strdup_2(str); cr_assert_str_eq(res, str); free(res); }
- #include <criterion/criterion.h>
- #include <stdlib.h>
- char *my_strdup_1(const char *str);
- char *my_strdup_2(const char *str);
- Test(my_strdup_1, should_work_correctly) {
- static const char str[] = "Qwerty";
char *const res = my_strdup_1(str);- char * const res = my_strdup_1(str);
- cr_assert_str_eq(res, str);
- free(res);
- }
- Test(my_strdup_2, should_work_correctly) {
- static const char str[] = "Qwerty";
- char *const res = my_strdup_2(str);
- cr_assert_str_eq(res, str);
- free(res);
- }