Question

Hey I'm having problems with my code I get creating the tokens and have it adding it add the tokens to a 2d array but it doesn't work correctly. Any idea why.

/* strtok example */ 
#include <stdio.h>
#include <string.h> 
int main () 
{ 
char str[] ="This a sample string";
char * st[4][0];
char * pch;
int i; 
printf ("Splitting string \"%s\" into tokens:\n",str); 
pch = strtok (str," "); 
while (pch != NULL) 
{ 
printf ("%s\n",pch); 
pch = strtok (NULL, " ");
for(i=0;i<4;i++)
{
st[i][0]=pch;
}

}
print(st, i);
return 0;
}

void print(char st[4][0], int i)
{
for(i=0;i<4;i++)
{
printf("%d - %s",i ,st[i][0]);
}
}
Was it helpful?

Solution 2

There are a number of problems: compare with this code:

/* strtok example */ 
#include <stdio.h>
#include <string.h> 

void print(char *st[4])  // Fixed parameter type
{
    int i; // i is a local counter
    for(i=0;i<4;i++)
    {
        printf("%d - %s\n",i ,st[i]);
    }
}

int main () 
{ 
    char str[] ="This a sample string";
    char * st[4];  // Corrected array definition
    char * pch;
    int i=0;       // Initialise counter i to 0
    printf ("Splitting string \"%s\" into tokens:\n",str); 
    pch = strtok (str," "); 
    while (pch != NULL) 
    { 
        st[i]=pch;   // Store string before overwriting pch, and only store in a single location
        printf ("%s\n",pch); 
        pch = strtok (NULL, " ");
        i++;         // increment i inside loop
    }
    print(st);
    return 0;
}

OTHER TIPS

char * st[4][0];

You are allocating an array of zero length. later you try to access the first element, which is non-existent, and therefore you get undefined behaviour.

I cannot see why this array has two dimensions anyway. You only access the first element of the second dimension, why not:

char * st[4];

??

To be more precise I don't understand the usage of this variable at all. Why do you write the same value in all four elements?

Licensed under: CC-BY-SA with attribution
Not affiliated with StackOverflow
scroll top