我需要通过指针交换两个字符,但是当我运行此代码时,程序崩溃。
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;
}
答案 0 :(得分:5)
char *s1 = "string1";
因为s1
指向字符串文字并且修改了C中的undefined behaviour。这就是为什么这不起作用。
而在此char s1[] = "string1";
s1
是一个数组,因此可以修改。
答案 1 :(得分:2)
不能修改字符串文字。您尝试修改代码中不允许的"string1"
。实际上,许多编译器将字符串文字放在一个可能无法写入的特殊部分中。
答案 2 :(得分:1)
这行代码创建了一个无法更改的字符串文字。它只是可读的。
char *s1 = "string1";
任何改变它的尝试都会给你一个错误。
虽然您的评论示例:
char s1[] = "string1";
创建一个实际的数组。这可以正常编辑和使用。