繁体   English   中英

C分段故障字符指针

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM