C分段fault-char指针
我需要帮助找出我在这里遇到分段错误的原因。 我已经过去了,我认为我的指针做错了,但我可以搞清楚是什么。
我的计划:
#include #include void encrypt(char* c); //characters are shifted by 175 int main(){ char* a; *a = 'a'; /*SEGMENTATION FAULT HERE!*/ encrypt(a); printf("test:%c/n",*a); return 0; }; void encrypt(char* c){ char* result; int i=(int)(*c); i+=175; if(i>255) { i-=256; } *c=(char)i; };
问题出在这里:
char *a; *a = 'a'
由于变量“a”未初始化,* a =’a’分配给随机存储器位置。
你可以这样做:
char a[1]; a[0] = 'a'; encrypt(&a[0]);
或者甚至只在你的情况下使用一个字符:
int main(){ char a = 'a'; encrypt(&a); printf("test:%c/n",a); return 0; };
char* a; *a = 'a'; /*SEGMENTATION FAULT HERE!*/
那里没有“那里”。 你声明a
并且没有初始化它。 然后你试着用它作为地址。 你需要指出一些事情。
一个例子:
char buffer[512]; char *a = buffer;
(注意buffer
具有最大大小,当它超出范围时,您无法引用任何指针。)
或动态记忆:
char *a = malloc(/* Some size... */); if (!a) { /* TODO: handle memory allocation failure */ } // todo - do something with a. free(a);
指针a
没有获得存储数据的实际空间。 你只是声明指针,但指向哪里? 你可以这样分配内存:
char *a = malloc(1);
然后它不会段错误。 之后你必须释放变量:
free(a);
但在这种情况下,甚至更好,
char a = 'a'; encript(&a);