所以这段代码给了我Exc_bad_access_code(2)
错误,我不明白为什么。我认为问题在于参数,但我不确定,有什么想法吗?
#include <stdio.h>
void swap(char *x, char *y);
/* Function to swap values at two pointers */
void swap(char *x, char *y)
{
char temp;
temp = *x;
*x = *y;
*y = temp;
}
int main(int argc, const char * argv[]) {
// insert code here...
char *a = "ASD123";
swap (a+1 , a+2);
return 0;
}
答案 0 :(得分:1)
您需要发布完整的崩溃日志以确定,但可能是您尝试操作字符串常量:
char *a = "ASD123";
swap (a+1 , a+2);
可能存在于只读内存中。
尝试:
char a[12];
strcpy(a, "ASD123");
swap (a+1 , a+2);
或:
char a[] = "ASD123";
swap (a+1 , a+2);
这会将字符串复制到堆栈中,可以在没有问题的情况下对其进行修改。您还可以使用strdup()
将字符串复制到堆上(不要忘记调用free()
来释放已分配的内存)。
答案 1 :(得分:0)
您需要正确初始化a
。像char a[7] = "ASD123";
char* a
仅创建pointer-to-char
,它没有分配足够的内存来存储字符。
答案 2 :(得分:0)
您正在尝试修改字符串文字。
更改
char *a = "ASD123";
到
char a[] = "ASD123";
,您的计划将有效。
在第一种情况下,a
只是一个指向字符串文字的指针,该字符串文字位于大多数平台上的内存写保护部分,因此崩溃是因为您尝试写信息写保护内存。
在第二种情况下,a
是长度为7的字符数组,用&#34; ASD123&#34;初始化。 (字符串为6个字符,终止零字符为1个字符)。