2016-10-14 2 views
1

Ich versuche, ein Token von einer Zeichenfolge zu erhalten, die durch Leerzeichen ("") begrenzt ist. Aber der folgende Code stürzt die Anwendung ab, wenn die Zeichenfolge char * ist.strtok_s stürzt Programm ab, wenn Zeichenfolge von char ist *

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

int main(){ 

char *str1 = "Hello World!"; //char str1[] works 
char *token; 
char *savePtr; 

token = strtok_s(str1, " ", &savePtr); 

printf("%s", token); 

return 0; 
} 

Ich habe auch die folgenden Warnungen:

C:\Users\Haris\Desktop\C files>gcc firstProgram.c -o firstprogram.exe 
firstProgram.c: In function 'main': 
firstProgram.c:10:9: warning: implicit declaration of function 'strtok_s' [-Wimplicit-function-declaration] 
token = strtok_s(str1, " ", &savePtr); 
     ^
firstProgram.c:10:7: warning: assignment makes pointer from integer without a cast [-Wint-conversion] 
token = strtok_s(str1, " ", &savePtr); 

Antwort

3

Die strtok_s Funktion ändert die Sache der Zeiger auf, Trennzeichen in Nullen drehen. So kann es nicht einen Zeiger auf eine Konstante nehmen. Aber Sie übergeben es str1, die ein Zeiger auf eine Zeichenfolge-Konstante ist. Wenn versucht wird, diese Zeichenfolge zu ändern, um die Trennzeichen in Nullen umzuwandeln, versucht sie, eine Konstante zu ändern. Das ist natürlich illegal.

+0

Vielen Dank. Aber wie kann ich dann strtok_s verwenden, um eine Zeichenkette zu ändern? Welchen Typ sollte die Saite haben? –

+0

* Ändern Sie eine Zeichenfolge und erhalten Sie ein Token. Zum Beispiel ist der String, mit dem ich arbeite, "echo par par". Wie kann ich diese Funktion verwenden, um "Echo" zu erhalten? –

+0

Übergeben Sie einfach keinen Zeiger auf eine Konstante. Sie können dies tun 'char str1 [] =" Hallo Welt ";' oder wie dies 'char * ptr = strdup (" Hallo Welt ");' oder 'char buf [80]; strcpy (buf, "Hallo Welt"); '- was auch immer. Übergeben Sie einfach keinen Zeiger auf eine Konstante. –

Verwandte Themen