I am asked to implement an analogue to the string.h library. However, I am not allowed to use the '\0' inside my library to end my string; that’s why I am supposed to use a structure for strings in my program.
I have this in mystring.h file:
#include <stdio.h>
#define MAXSTRLEN 100 // Defining the maximum lenght of the string as being 100
typedef struct scell *mystring_t;
mystring_t makemystring (char cs[]); // This function stores a given string into the mystring structure
I have this in mystring.cfile:
#include <stdlib.h>
#include "mystring.h" // including the header file of mystring library
struct scell {
char *string;
int length;
};
mystring_t makemystring (char cs[]){ //Storing a string into the structure
int i = 0;
mystring_t ns;
ns->string=(char*)calloc(MAXSTRLEN ,sizeof(char));
// printf ("I allocated memory for the string");
while (cs[i] != '\0')
{
printf ("\nI entered into the while\n");
ns->string[i] = cs[i];
printf ("I inserted\n");
i++;
printf ("I incremented the count\n");
}
ns->length=i; // storing the length of the string into the structure
printf ("%d\n", ns->length);
printf ("refreshed the length\n");
printf ("%d", ns->length);
return ns;
}
I have this in the main.c file:
#include "mystring.h"
#include <stdlib.h>
int main () {
int result;
mystring_t S1;
mystring_t S2;
// create two strings
S2 = makemystring("Bye");
printf("I got out of the makemystring function\n");
S1 = makemystring("Hi");
These printf() calls are just debugging statements.
It seems to me that the function makemystring works correctly but I have a crash at the level of returning.
Can anyone please help?
nsis an uninitialized pointer when it is dereferenced:as
mystring_tis atypedefforstruct cell*. Allocate memory fornsbefore using:FWIW, this is one of the reasons I dislike hiding pointers in
typedefs as it is not obvious at point of use.Protect going beyond the bounds of
ns->stringin the condition of thewhileloop.