为什么在c中动态分配时会出现分段错误?

时间:2015-02-23 06:47:18

标签: c string

这是我的代码,当我运行它时,我遇到了分段错误。

 char *s = NULL;
s = (char *)malloc(5*sizeof(char));

s[0]='10';

s[1]='20';

printf("%s",s[1]);

请告诉错误的位置以及发生这种情况的原因。我对程序的意图是动态创建一个字符串,逐字节地给它一些值并逐字节地打印它们。

有没有办法将整数值添加到字符串。因为,我有一个情况,字符串的长度是在字符串的第一部分后跟数据。请在C中建议任何方法。

4 个答案:

答案 0 :(得分:2)

您正在s[0]s[1]中存储多字节字符。除此之外,使用%c格式说明符来打印字符。

答案 1 :(得分:2)

printf("%s", s[1]);表示从地址(int)' 20'开始打印字符串。这显然是一个错误。应该是:s[2]='\0'; printf("%s", s+1 /*&s[1]*/);

答案 2 :(得分:1)

1。s[0]char,您无法为其分配10。 (它将编译并发出警告,但它没有按照您的预期进行编译)

2. printf("%s",s[1]);也会导致未定义的行为,因为后跟s[1]的字符串不会以空值终止。

答案 3 :(得分:0)

Don't cast malloc和family的结果。

s[0]s[1]只占用一个字节值。

然后你的字符串不是以空字符结尾的字符串。

试试这个。

  s[0]='h';
  s[1]='i'; 
  s[2]='\0'; 

  printf("%s",s);

%s用于打印字符串。使用%c打印角色。

  printf("%c",s[1]);

您可以像这样使用整数存储到char数组

 char *s=malloc(123);
 sprintf(s,"%d",integer_value);

然后使用strcat将字符串存储在其中。

传递给这样的函数使用,

   void func(char *);
   main() { 
      . . .
       func(s);
      . . .
   }
   void func(char *str)
    { 
         // do what you need
    }

如果在整数和字符串斜杠之间可用(例如在评论中),则可以使用strtok函数。在使用strtok函数之前,请为您的字符串备份。它会修改您的内容。或者你可以这样使用,

  sscanf(str,"%d / %s",&int,string);

现在字符串的值为"hello"

  char s[10];
  sprintf(s,"%d",int);
  strcat(str,s);

试试这个,

    int fd;

    char str[]="data7";
    char st[12];

    sscanf(str,"%[^ 0-9] %d",st,&fd);
    printf("st:%s\tfd:%d\n",st,fd);