C 为什么strtok在给定*字符串时会出错,而在给定字符串[]时不会出错?
考虑以下程序C 为什么strtok在给定*字符串时会出错,而在给定字符串[]时不会出错?,c,strtok,C,Strtok,考虑以下程序 #include <stdio.h> #include <string.h> int main() { char *str = "This is a test."; char *token; token = strtok(str," "); } #包括 #包括 int main(){ char*str=“这是一个测试。”; 字符*令牌; 标记=strtok(str,“”); } 这将是一个错误。但是如果我把*str改成,比如说
#include <stdio.h>
#include <string.h>
int main() {
char *str = "This is a test.";
char *token;
token = strtok(str," ");
}
#包括
#包括
int main(){
char*str=“这是一个测试。”;
字符*令牌;
标记=strtok(str,“”);
}
这将是一个错误。但是如果我把*str改成,比如说,str[80],它就不会。为什么会这样
谢谢问题是类型不对
char *str = "This is a test.";
它可能会说char*
,但右边的东西实际上是char const*
(C在允许类型双关方面非常宽松(这个词正确吗))。任何修改常量的尝试都是未定义的行为
函数strtok()
实际上修改了基础字符串(通过插入'\0'),因此这是未定义的行为
通过做来修正
char str[] = "This is a test.";
问题是类型不对
char *str = "This is a test.";
它可能会说char*
,但右边的东西实际上是char const*
(C在允许类型双关方面非常宽松(这个词正确吗))。任何修改常量的尝试都是未定义的行为
函数strtok()
实际上修改了基础字符串(通过插入'\0'),因此这是未定义的行为
通过做来修正
char str[] = "This is a test.";
你知道数组和指针的区别吗?知道。你是说*str失败是因为它是指针,而str[]是数组?表示“由于数组会立即衰减为指针,因此数组永远不会真正传递给函数。”。这让我相信,在这两种情况下,我都在传递一个指向strtok的指针。但是,在工作情况下,您传递的是指向数组的指针,而在非工作情况下,您传递的是指向字符串文字的指针。您知道数组和指针之间的区别吗?是的。你是说*str失败是因为它是指针,而str[]是数组?表示“由于数组会立即衰减为指针,因此数组永远不会真正传递给函数。”。这让我相信,在这两种情况下,我都在传递一个指向strtok的指针。但是,在工作情况下,您传递的是指向数组的指针,而在非工作情况下,您传递的是指向字符串文字的指针。