Hi All,

I am facing a problem with using the function strtok(). Following is just a sample code.
The code below stores the string str delimited by comma into an array.

I want to modify the code below so that array would contain an empty space/new line if a value is missing.

i.e., if str[] = source, desti, string1,,string3 ; then my array should hold an empty space/ new line in place of string2.

Can somebody help me with this?
Thanks in Advance

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

main() 
{
	char str[] = "source,desti,string1,string2,string3";
	char delims[] = ",";
	char *result = NULL;
	char myArray[10][50],*p;

	
	result = strtok( str, delims );
	
	while( result != NULL ) 
	{
		printf( "%s \n", result );
		result = strtok( NULL, delims );
	}
	
       getch();

}

Recommended Answers

All 4 Replies

Member Avatar for iamthwee

Maybe you could find the length of the string inbetween the commas. If it is zero then fill it with a space or newline.

strtok ignores empty fields. Edward would recommend using another solution, like strcspn and some method of reading or copying a substring:

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

int main()
{
  const char *str = "source,desti,string1,,string3";
  const char *delims = ",";

  size_t start = 0;

  while (str[start] != '\0') {
    size_t end = strcspn(str + start, delims);

    printf("%.*s\n", end, str + start);

    start += (str[start + end] != '\0') ? end + 1 : end;
  }
}

The benefit of this approach is that you don't modify the original string anymore, so it works with string literals. :)

strtok ignores empty fields. Edward would recommend using another solution, like strcspn and some method of reading or copying a substring:

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

int main()
{
  const char *str = "source,desti,string1,,string3";
  const char *delims = ",";

  size_t start = 0;

  while (str[start] != '\0') {
    size_t end = strcspn(str + start, delims);

    printf("%.*s\n", end, str + start);

    start += (str[start + end] != '\0') ? end + 1 : end;
  }
}

The benefit of this approach is that you don't modify the original string anymore, so it works with string literals. :)

Thanks a lot :) It was very helpful

Hi guys, I'm new to C here. How do I assign the value to a variable printed from the line:

printf("%.*s\n", end, str + start);

Please advise, thanks!

Be a part of the DaniWeb community

We're a friendly, industry-focused community of developers, IT pros, digital marketers, and technology enthusiasts meeting, networking, learning, and sharing knowledge.