/* strtok example */
#include <stdio.h>
#include <string.h>
int main ( )
{
char str[ 256 ] ;
char * before1, * before2, * after1, * after2;
for ( int i = 0 ; i < 26 ; i += 2 ) {
str[ i] = 'a' + i;
str[ i+ 1 ] = '-' ;
}
printf ( "Before strtok, str: %s\n " , str
) ;
printf ( "After strtok, str: %s\n \n " , str
) ; // ^ As visible, the input string str has been modified as well
printf ( "Before re-initialization, before1: %s\n " , before1
) ; printf ( "Before re-initialization, before2: %s\n \n " , before2
) ;
for ( int i = 0 ; i < 26 ; i += 2 ) {
str[ i] = 'z' - i;
str[ i+ 1 ] = ' ' ;
}
printf ( "After re-initialization, before1: %s\n " , before1
) ; printf ( "After re-initialization, before2: %s\n " , before2
) ; printf ( "After re-initialization, after1: %s\n " , after1
) ; printf ( "After re-initialization, after2: %s\n " , after2
) ;
return 0 ;
}
Lyogc3RydG9rIGV4YW1wbGUgKi8KI2luY2x1ZGUgPHN0ZGlvLmg+CiNpbmNsdWRlIDxzdHJpbmcuaD4KCmludCBtYWluICgpCnsKICBjaGFyIHN0clsyNTZdOwogIGNoYXIgKmJlZm9yZTEsICpiZWZvcmUyLCAqYWZ0ZXIxLCAqYWZ0ZXIyOwoKICBmb3IoaW50IGkgPSAwOyBpIDwgMjY7IGkgKz0gMikgewoJCXN0cltpXSA9ICdhJyArIGk7ICAKCQlzdHJbaSsxXSA9ICctJzsKCX0KCQoJcHJpbnRmKCJCZWZvcmUgc3RydG9rLCBzdHI6ICVzXG4iLCBzdHIpOwoJCiAgYmVmb3JlMSA9IHN0cnRvayAoc3RyLCItIik7CiAgYmVmb3JlMiA9IHN0cnRvayAoTlVMTCwiLSIpOwogIAoKICBwcmludGYgKCJBZnRlciBzdHJ0b2ssIHN0cjogJXNcblxuIiwgc3RyKTsKICAvLyBeIEFzIHZpc2libGUsIHRoZSBpbnB1dCBzdHJpbmcgc3RyIGhhcyBiZWVuIG1vZGlmaWVkIGFzIHdlbGwKICAKICBwcmludGYgKCJCZWZvcmUgcmUtaW5pdGlhbGl6YXRpb24sIGJlZm9yZTE6ICVzXG4iLCBiZWZvcmUxKTsKICBwcmludGYgKCJCZWZvcmUgcmUtaW5pdGlhbGl6YXRpb24sIGJlZm9yZTI6ICVzXG5cbiIsIGJlZm9yZTIpOwoKICAKICBmb3IoaW50IGkgPSAwOyBpIDwgMjY7IGkgKz0gMikgewoJCXN0cltpXSA9ICd6JyAtIGk7ICAKCQlzdHJbaSsxXSA9ICcgJzsKCX0KICBhZnRlcjEgPSBzdHJ0b2sgKHN0ciwiICIpOwogIGFmdGVyMiA9IHN0cnRvayAoTlVMTCwiICIpOwogIAogIHByaW50ZiAoIkFmdGVyIHJlLWluaXRpYWxpemF0aW9uLCBiZWZvcmUxOiAlc1xuIiwgYmVmb3JlMSk7CiAgcHJpbnRmICgiQWZ0ZXIgcmUtaW5pdGlhbGl6YXRpb24sIGJlZm9yZTI6ICVzXG4iLCBiZWZvcmUyKTsKICBwcmludGYgKCJBZnRlciByZS1pbml0aWFsaXphdGlvbiwgYWZ0ZXIxOiAlc1xuIiwgYWZ0ZXIxKTsKICBwcmludGYgKCJBZnRlciByZS1pbml0aWFsaXphdGlvbiwgYWZ0ZXIyOiAlc1xuIiwgYWZ0ZXIyKTsKIAogIHJldHVybiAwOwp9Cg==
stdout
Before strtok, str: a-c-e-g-i-k-m-o-q-s-u-w-y-
After strtok, str: a
Before re-initialization, before1: a
Before re-initialization, before2: c
After re-initialization, before1: z
After re-initialization, before2: x
After re-initialization, after1: z
After re-initialization, after2: x