[英]C segmentation fault-char pointers
我需要帮助弄清楚为什么我在这里遇到细分错误。 我已经看完了,我认为指针做错了什么,但是我能弄清楚是什么。
我的程序:
#include <stdlib.h>
#include <stdio.h>
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
,并且未对其进行初始化。 然后,您尝试将其用作地址。 你需要做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);
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.