strtok的参数-为什么不能用指向“字符串“常量的指针

C语言 码拜 9年前 (2015-10-22) 1351次浏览
为什么不能用指向“字符串“常量的指针呢?具体见代码

#include <stdio.h>
#include <stdlib.h>
#include <string.h>
void print_tokens(char *line)
{
    static char whitespace[] = " \t\f\r\v\n";
    printf("%s\n", line);
    char *token;
    for ( token = strtok(line, " "); token != NULL;
        token = strtok(NULL, whitespace) )
        printf("%s\n", token);
}
int main()
{
    char input[] = "aa bb cc dddd fsd123 134 fwe";
    print_tokens(input);//假如把这里的input换成"aa bb cc dddd fsd123 134 fwe"程序就会崩溃
    return 0;
}
解决方案:15分
原因是那个函数会对你的输入字符串进行修改,在分隔符的地方替换字符为\0,假如你给常量字符串,这样的操作是被禁止的,当然要报错了。另外这个函数是多线程不安全的,切勿在多线程应用中使用。
解决方案:15分
#pragma comment(linker,"/SECTION:.rdata,RW")
//加这句可以让常量区可写,后果自负!

CodeBye 版权所有丨如未注明 , 均为原创丨本网站采用BY-NC-SA协议进行授权 , 转载请注明strtok的参数-为什么不能用指向“字符串“常量的指针
喜欢 (0)
[1034331897@qq.com]
分享 (0)