c - 执行与字符串相关的 C 程序时出现段错误

标签 c pointers

我有以下代码。我初始化了 2 个指针,一个在字符串的开头,另一个在字符串的结尾。在每一步之后,我递增第一个指针并递减第二个指针。如果取消引用第一个指针获得的值小于取消引用第二个指针获得的值,我将第一个指针的值复制到第二个。

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

int main() {
   char *word="aacdbc";
   char *p=word;
   char *q=word+(strlen(word)-1);
   printf("\n%s\n",word);
   int i;
   for(i=1;i<=strlen(word)-1;++i) {
      if(*p<*q) {
         *q=*p;
      }
      ++p;
      --q;
   }
   printf("\n%s\n",word);
   return 0;
}

但是代码显示“段错误”。我错在哪一行?

最佳答案

C(和 C++)中的字符串文字是不可变的。因此,您尝试更改变量 word

指向的字符串文字
char *word = "aacdbc";

undefined behaviour .

将指针的定义改为数组

char word[] = "aacdbc";

程序可能如下所示

#include <stdio.h>

int main( void )
{
   char word[] = "aacdbc";
   char *p = word;
   char *q = word+ + sizeof( worrd ) - 1;

   printf( "\n%s\n", word );

   while ( p < q && p < --q )
   {
      if ( *p < *q ) *q = *p;
      ++p;
   }

   printf( "\n%s\n", word );

   return 0;
}

关于c - 执行与字符串相关的 C 程序时出现段错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25314396/

相关文章:

c - 声明 C 结构的语法正确方法是什么?

ios - 格式字符串未使用数据参数

c++ - MKL 或 BLAS 例程将 vector 乘以不合适的标量

c - 自定义 GTK 小部件的背景呈现为纯黑色

c - 打印二维数组 `*((*arr+(i*3))+j)` 时 `arr` 如何工作?

c - 测试两个 __m128i 变量之间的相等性

使用 strcmp 比较字符数组和字符指针

c++ - 'struct (*)[]' 和 'struct *[]' 有什么区别?

c - C 中的指针与类型转换

c++ - 有没有办法在递归中使用指针来查找数组的最小值?