将C字符串分配给PANTER到字符-C++程序崩溃 我知道你可以用字符串。H类来解决这个问题,我使用C++,但是我想知道为什么我会崩溃。
错误很小,只是崩溃了:将C字符串分配给PANTER到字符-C++程序崩溃 我知道你可以用字符串。H类来解决这个问题,我使用C++,但是我想知道为什么我会崩溃。,c++,arrays,string,crash,C++,Arrays,String,Crash,错误很小,只是崩溃了: Segmentation fault (core dumped) 我试图将字符串向左移动1,以便有效地擦除字符串中的第一个字符 #include <stdio.h> #include <iostream> #include <string.h> using namespace std; int main() { char * p1 = "192739@something.com"; for (int
Segmentation fault (core dumped)
我试图将字符串向左移动1,以便有效地擦除字符串中的第一个字符
#include <stdio.h>
#include <iostream>
#include <string.h>
using namespace std;
int main()
{
char * p1 = "192739@something.com";
for (int i = 0; p1[i] != '\0'; i++)
{
p1[i] = p1[i + 1];
}
return 0;
}
导致崩溃的原因是什么?p1指向一个字符串文本,这是不允许修改的内存。将其声明为char p1[]=应该可以解决您的问题。请注意,您也可以将p1+1视为字符串,只要您知道p1中至少有一个字符。p1指向字符串文字,这是不允许修改的内存。将其声明为char p1[]=应该可以解决您的问题。请注意,您也可以将p1+1视为字符串,只要您知道p1中至少有一个字符。这并不优雅,但这将起作用:
char *p1 = "192739@something.com";
char p2[100];
int i = 0;
char c = p1[0];
while(c != '\0')
{
c = p1[i+1];
p2[i] = p1[i+1];
i++;
}
这并不优雅,但这会起作用:
char *p1 = "192739@something.com";
char p2[100];
int i = 0;
char c = p1[0];
while(c != '\0')
{
c = p1[i+1];
p2[i] = p1[i+1];
i++;
}
<>你有时可以用C++来捕捉分割错误。此代码仅用于学习,捕获操作系统编程要侦听和响应的信号可能会导致古怪的抓头行为,并且需要深入了解操作系统在幕后对程序所做的操作 C++代码: 这段代码是一种黑客行为,它使用处理器和编译器特定的未定义行为,并带有常见的警告。根据您收到的分段错误的类型,这可能不起作用。然而,在许多情况下,程序在退出之前能够在内存可能损坏的情况下运行更多的命令。在ouch方法中,您可能能够在操作系统销毁程序之前发出更多命令并收集有关程序状态的信息
基本上这是C++程序:WOHAI我知道我真的搞砸了,操作系统恨我,但是让我在OS恢复资源之前再做一件事。 < p>你有时可以用C++来捕捉一个分割错误。此代码仅用于学习,捕获操作系统编程要侦听和响应的信号可能会导致古怪的抓头行为,并且需要深入了解操作系统在幕后对程序所做的操作 C++代码: 这段代码是一种黑客行为,它使用处理器和编译器特定的未定义行为,并带有常见的警告。根据您收到的分段错误的类型,这可能不起作用。然而,在许多情况下,程序在退出之前能够在内存可能损坏的情况下运行更多的命令。在ouch方法中,您可能能够在操作系统销毁程序之前发出更多命令并收集有关程序状态的信息
基本上这是C++程序:WOHAI我知道我真的搞砸了,操作系统恨我,但是让我在OS恢复资源之前再做一件事。stringer文本是不可修改的。修改字符串文字是未定义的行为。如果使用C++,不要用C和C++ +字符串字符串来双重标记问题。stringer文本是不可修改的。修改字符串文字是未定义的行为。如果使用C++,不要用C和C++来双重标记问题。
a.cpp: In function ‘void this_method_causes_segmentation_fault_core_dump()’:
We get signal, main screen turn on. 11