【发布时间】:2015-08-13 16:46:06
【问题描述】:
我在我的 C 程序中发现了一个对 strtok() 的调用的问题(为了记录,它的签名是 char *strtok(char *str, const char *delim))。在尝试在一个非常简单的玩具程序中重现该问题时,我碰壁了 - 我传递了所有正确的参数类型,并且每次尝试运行代码时都会出现总线错误。
这是程序:
#include <string.h>
#include <stdio.h>
#include <stdlib.h>
int main() {
char* tok;
char* str = "www.example.com";
const char* split = ".";
tok = strtok(str, split);
while(tok != NULL) {
printf("%s\n", tok);
tok = strtok(NULL, split);
}
}
奇怪的是,我发现将 str 声明为数组 (char str[] = "www.example.com") 并将对 str 的引用传递给初始 strtok 调用 (tok = strtok(&str, split)) 似乎确实可以正常工作。
我并不真正担心这里的功能 - 使用数组的解决方案有效。我很好奇为什么使用指向char 的指针的原始实现会失败并引发总线错误。
【问题讨论】:
标签: c arrays string pointers strtok