【发布时间】:2016-02-04 19:43:49
【问题描述】:
我有一个简单的程序,其中有一个我在外部编写的字符串(在这个片段的情况下,它是用户创建的)。我正在尝试将其中的某些部分大写。
我首先用分隔符将其分隔,并尝试使用 toupper 函数将其大写,但是我似乎遇到了段错误。运行 valgrind 不会出现任何错误,只是简单地说:
Process terminating with default action of signal 11 (SIGSEGV)
==10180== Bad permissions for mapped region at address 0x4007B9
代码:
int main(void) {
char * test;
char * f;
char * s;
char * p;
test = "first:second:third:fourth:";
f = strtok(test,":");
for(p = f; *p; *p = toupper(*p), p++); //segfaults
printf("f is %s \n",f); //this should print "FIRST" as it should be capitalized
return 0;
}
【问题讨论】:
-
f = s = p = test = malloc(sizeof(char * ) * 10);这是什么? -
内存泄漏,内存大小不正确...太多...
-
@SouravGhosh 哇!我没看到啊!!!!当我看到
test = strtok(STRING_LITERAL, ...)时,我立即回答。 -
我认为 mallocing char * 是个好习惯?
-
你可能需要先读一本好书,不要冒犯。
标签: c string pointers segmentation-fault