4

我需要通过指针交换两个字符,但是当我运行这段代码时,程序崩溃了。

int main(){
    char *s1 = "string1";
    swap(st,(st+1));

    /* BUT THIS CODE WORKS - Whats the problem?
     * char s1[] = "string1";
     * swap(s1,&s1[1]);
     */

    return 0;
}

void swap(char * const ptr1, char * const ptr2){

    char temp = *ptr1;
    *ptr1 = *ptr2;
    *ptr2 = temp;

}
4

3 回答 3

5
char *s1 = "string1";

因为s1指向字符串文字并且修改会调用C 中未定义的行为。这就是为什么这不起作用。

而在这 char s1[] = "string1";

s1是一个数组,因此可以修改。

于 2013-01-27T11:42:06.827 回答
2

不能修改字符串文字。您尝试"string1"在不允许的代码中进行修改。实际上,许多编译器将字符串文字放在可能不会写入的特殊部分中。

于 2013-01-27T11:42:46.987 回答
1

这行代码创建了一个无法更改的字符串文字。它只是可读的。

char *s1 = "string1";

任何改变它的尝试都会给你一个错误。

虽然您评论的示例:

 char s1[] = "string1";

创建一个实际的数组。这可以正常编辑和使用。

于 2013-01-27T11:43:19.060 回答