相关疑难解决方法(0)

为什么在写入用"char*s"而不是"char s []"初始化的字符串时会出现分段错误?

以下代码在第2行接收seg错误:

char *str = "string";
str[0] = 'z';  // could be also written as *str = 'z'
printf("%s\n", str);
Run Code Online (Sandbox Code Playgroud)

虽然这非常有效:

char str[] = "string";
str[0] = 'z';
printf("%s\n", str);
Run Code Online (Sandbox Code Playgroud)

经过MSVC和GCC测试.

c c-strings segmentation-fault

277
推荐指数
10
解决办法
7万
查看次数

C-String数组初始化 - 这是可变的吗?

可能重复:
修改C字符串常量?
const char与char数组vs std :: string的指针

我知道我可能会用这个问题击败死马,但我有点困惑,我还没有找到SO或谷歌的确切答案(我有信心是对的 - 这里有太多的信息在C字符串上筛选).另外,我已经将它标记为C++,因为这是我感兴趣的,即使我们特别谈论的是C风格的字符串.

在这种情况下:

char const a*  = "hello";
char const b[] = "goodbye";
Run Code Online (Sandbox Code Playgroud)

我本来以为"你好"和"再见"是不可变的字符串,因为它们来自应衰减到一个char*常量字符串常量.

我已经看到了,在这种特殊情况下,虽然,改变"你好"将是不确定的,同时改变"再见"就可以了,假设你剥去从B数组常量性.

我假设在b的情况下字符串是可变的,因为它存储在用户定义的数组中.

在这种情况下,你好,再见不同吗? 在这个例子中,由于某些原因,再见不是字符串文字.另外,如果再见不是字符串文字,我可以假设它不在全局内存中,并且在编译时间之后对它的唯一引用是留在用户数组单元格中吗?

c++ c-strings

9
推荐指数
2
解决办法
1万
查看次数

字符串反向程序抛出异常

// ExampleCodes.cpp : Defines the entry point for the console application.
//

#include "stdafx.h"
#include<stdio.h>
#include<iostream>
using namespace std;    

char* stringReverse(char* s)    
{    

    char temp, *p,*q;    
    q = s;    
    while( *(++q));    
    for( p = s; p &lt; --q; p++)    
    {    
        temp = *p;    
        *p = *q;     
        *q = temp;    
    }    
    return s;    
}    


int _tmain(int argc, _TCHAR* argv[])    
{    

    stringReverse("StringReverse");    
    return 0;    
}    
Run Code Online (Sandbox Code Playgroud)

c++

2
推荐指数
2
解决办法
520
查看次数

修改C字符串:访问冲突

可能的重复:
为什么简单的C代码会收到分段错误?
修改C字符串常量?

为什么此代码会产生访问冲突?

int main()
{
    char* myString = "5";
    *myString = 'e'; // Crash
    return 0;
}
Run Code Online (Sandbox Code Playgroud)

c c++ string

1
推荐指数
1
解决办法
1823
查看次数

通过指针更改C中的字符串文字?

可能重复:
为什么在写入字符串时会出现分段错误?

我有以下程序:

char *s     = "abcdf";
char s1[50] = "abcdf";

s1[0] = 'Q';   // Line 1
s[0] = 'P';    // Line 2
Run Code Online (Sandbox Code Playgroud)

为什么Line 1工作正常并Line 2导致程序崩溃?

c string

1
推荐指数
1
解决办法
2400
查看次数

访问违规char*arr [5] = {...},这是什么?

可能重复:
修改C字符串常量?

你能解释为什么我在上述线路上遇到访问冲突吗?我猜这是我的进程内存,我可以访问和更改它的内容.

#include <stdio.h>

int main()
{
    char* list[5]={"An","exam","on","Hall oween","night!!!!"};
    char **p;
    p=list;
    *(*(p+1)+2)='A'; //  <==== Access vioalation here
    return 0;
}
Run Code Online (Sandbox Code Playgroud)

c c++ gcc segmentation-fault visual-studio

0
推荐指数
1
解决办法
523
查看次数

C中的字符串差异

可能重复:
修改C字符串常量?

使用malloc时char*str有什么区别?

int i;
char *s =  (char*)malloc(sizeof(char)*27); 
for(i=0;i<26;i++)
  s[i]='a'+i;
s[26]='\0';
printf("%s\n",s);
reverse(s);
printf("%s\n",s);
Run Code Online (Sandbox Code Playgroud)

其中reverse()是

void reverse(char *str)
{
  int i,j=strlen(str)-1;
  char tmp;
  for(i=0;i<j;i++,j--)
  {
    tmp=str[i];
    str[i]=str[j];
    str[j]=tmp;
  }   
}
Run Code Online (Sandbox Code Playgroud)

这工作正常,但使用时

char *t = "new string";
printf("%s\n",t);
reverse(t);
printf("%s\n",t);
Run Code Online (Sandbox Code Playgroud)

我得到一个段错误,调试器说它是反向的strlen.将char*t更改为char t []可以正常工作.是什么赋予了?

c string pointers

-3
推荐指数
1
解决办法
106
查看次数

标签 统计

c ×5

c++ ×4

string ×3

c-strings ×2

segmentation-fault ×2

gcc ×1

pointers ×1

visual-studio ×1