C程序段错误

时间:2017-10-01 06:34:43

标签: c

我希望输出为XOllo,但是段错是我得到的。

#include <stdio.h>
#include <string.h>

int main(){

  char *buf="hello";
  char *xys="XO";

  while(*buf != 'l'){
  *buf = *xys;
  xys++;
  buf++;
  }
  printf("%s \n", buf);
  return 0;
}

O /对 - : 段错误

我需要o / p作为XOllo,但我得到了seg错误。请建议。

Please suggest. 

1 个答案:

答案 0 :(得分:0)

变量bufxys指向不能更改的字符串文字,因此尝试访问重新写入导致SIGFAULT的值,而不是需要分配新变量和副本价值观:

#include <stdio.h>
#include <stdlib.h>
#include <string.h>

int main(){

  char *buf="hello";
  char *xys="XO";
  char *tmp = (char *)malloc(strlen(buf));

  strcpy(tmp, xys);
  strcpy(tmp+2, buf+2);

  printf("%s \n", tmp);
  free(tmp);
  return 0;
}

如果您需要找到l字符的确切位置,可以使用strchr函数以下列方式获取其索引:

int index = -1
const char *ptr = strchr(buff, 'l');
if(ptr) {
   index = ptr - values;
}