C分段fault-char指针

时间:2012-03-11 19:38:33

标签: c encryption segmentation-fault

我需要帮助找出我在这里遇到分段错误的原因。我已经过去了,我认为我的指针做错了,但我可以搞清楚是什么。

我的计划:

#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;

};

3 个答案:

答案 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);