简体   繁体   English

迭代字符串时C中的分段错误

[英]Segmentation fault in C when iterating through a string

I am very new to C and I am supposed to be creating the strtok function. 我是C的新手,我应该创建strtok函数。 Problem is, I keep getting a segmentation fault error in this code: 问题是,我在这段代码中不断收到分段错误错误:

char *newstring = "testing, testing, tested."
while(*newstring != '\0' ){
    /*replace delimiters with nulls*/
    printf("STARTING ITERATION\n");
    if(*newstring ==','){
        *newstring='\0';
    }

    printf("newstring char in loop: %c\n", *newstring);
    /*printf("delimiters char in loop: %c\n", *delimiters);*/
    newstring++;
    printf("END OF ITERATION\n");
}
printf("OUT OF ITERATION");

Output is thus: 因此输出:

STARTING ITERATION
newstring char in loop: t
END OF ITERATION
STARTING ITERATION
newstring char in loop: e
END OF ITERATION
STARTING ITERATION
newstring char in loop: s
END OF ITERATION
STARTING ITERATION
newstring char in loop: t
END OF ITERATION
STARTING ITERATION
newstring char in loop:
END OF ITERATION
STARTING ITERATION
newstring char in loop: t
END OF ITERATION
STARTING ITERATION
newstring char in loop: e
END OF ITERATION
STARTING ITERATION
newstring char in loop: s
END OF ITERATION
STARTING ITERATION
newstring char in loop: t
END OF ITERATION
STARTING ITERATION
newstring char in loop:
END OF ITERATION
STARTING ITERATION
newstring char in loop: t
END OF ITERATION
STARTING ITERATION
newstring char in loop: e
END OF ITERATION
STARTING ITERATION
newstring char in loop: s
END OF ITERATION
STARTING ITERATION
newstring char in loop: .
END OF ITERATION
Segmentation fault (core dumped)

So, it looks like it gets all the way through to the end of the string and the very end of the loop, but doesn't actually make it OUT of the loop. 因此,看起来它一直到字符串的结尾和循环的结尾,但实际上并没有使它成为循环的OUT。 I am not sure what I am missing. 我不确定我错过了什么。

You're trying to modify a string literal, which is not allowed in C. If you change char *newstring = "testing, testing, tested." 您正在尝试修改C中不允许的字符串文字。如果更改char *newstring = "testing, testing, tested." to char newstring[] = "testing, testing, tested." to char newstring[] = "testing, testing, tested." , then you are modifying the contents of the array. ,然后你正在修改数组的内容。

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM