我需要帮助找出我在这里遇到分段错误的原因。我已经过去了,我认为我的指针做错了,但我可以搞清楚是什么。
我的计划:
#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;
};
答案 0 :(得分:7)
问题在于:
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;
};
答案 1 :(得分:1)
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);
答案 2 :(得分:1)
指针a
没有获得存储数据的实际空间。你只是声明指针,但指向哪里?您可以这样分配内存:
char *a = malloc(1);
然后它不会段错误。之后您必须释放变量:
free(a);
但在这种情况下,甚至更好,
char a = 'a';
encript(&a);