#include #include #include #include "myString.h" struct string { int length; char *data; }; struct string * makeString(const char *s) { struct string *s2; s2 = malloc(sizeof(struct string)); if(s2 == 0) { return 0; } /* let caller worry about malloc failures */ s2->length = strlen(s); // s2->data = malloc(s2->length ); // s2->data = malloc(s2->length + 1); s2->data = calloc(s2->length + 1, sizeof(s[0])); // initialized to 0 if(s2->data == 0) { free(s2); return 0; } strncpy(s2->data, s, s2->length); // s2->data[s2->length] = '\0'; return s2; } void destroyString(struct string *s) { free(s->data); free(s); } int stringLength(struct string *s) { return s->length; } int stringCharAt(struct string *s, int index) { if(index < 0 || index >= s->length) { return -1; } else { return s->data[index]; } } int main(int argc, char **argv) { struct string *s = makeString("this is a string test."); struct string *s2 = makeString("this is also a string test."); printf("String: %s, length = %d\n", s->data, stringLength(s)); printf("String: %s, length = %d\n", s2->data, stringLength(s2)); for(int i=0; i < s2->length; i++, i++){ printf("s[%d] = %c\n", i, stringCharAt(s2,i)); } destroyString(s); destroyString(s2); return 0; }