我试图附加两个字符但由于某种原因我得到了一个分段错误.
我的代码就像;
#include <string.h>
char *one = (char*)("one");
char *two = (char*)("two");
strcat(one, two);
Run Code Online (Sandbox Code Playgroud)
而且我似乎遇到了分段错误strcat(one, two),为什么会这样?
我得到了我的程序这种奇怪的行为,我无法弄清楚.我的教授在我的程序中向我展示了一个缺陷,我只是在构造一个对象时复制一个char指针,而不是制作整个数组的新副本,所以你可以随意使用它.他用类似的代码证明了这一点.
对于代码:
char sweat[] ="Sweater";
warenkorb = new WareImKorb(new Textil (205366,4.2,sweat,40),2,warenkorb);
sweat[0] = '\0';
Run Code Online (Sandbox Code Playgroud)
现在,如果我改为:
char* sweat ="Sweater";
Run Code Online (Sandbox Code Playgroud)
该程序运行良好,直到我尝试汗[0] ='\ 0'; 它只是简单的.
然而,这有效:char cc [] ="Sweater"; char*sweat = cc;
它真的很烦我,我不明白,为什么版本1不起作用.希望你们能帮助我,否则我会疯狂地想知道这件事.
我正在尝试创建一个非递归方法来交换c风格的字符串.它在Swap方法中抛出异常.无法弄清楚问题.
void Swap(char *a, char* b)
{
char temp;
temp = *a;
*a = *b;
*b = temp;
}
void Reverse_String(char * str, int length)
{
for(int i=0 ; i <= length/2; i++) //do till the middle
{
Swap(str+i, str+length - i);
}
}
Run Code Online (Sandbox Code Playgroud)
编辑:我知道有更好的方法来做到这一点.但是因为我正在学习,想知道代码的问题.
可能重复:
为什么在写入字符串时会出现分段错误?
我有以下程序:
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导致程序崩溃?
我试图理解指针,这是我正在尝试实施的K&R程序.该程序是strcpy与KR的代码.
/*strcpy: copy t to s; pointer version 3*/
void strcpy(char *s, char *t){
while(*s++ = *t++)
;
}
Run Code Online (Sandbox Code Playgroud)
所以为了实现这个程序,我补充道
#include<stdio.h>
int main(){
char *s="abc", *t="ABC" ;
strcpy(s,t);
printf("%s\n",t);
printf("%s\n", s);
return 0;
}
Run Code Online (Sandbox Code Playgroud)
但是,当我运行它时,我收到分段错误.我确信我错过了一些东西,但不太确定是什么.
谢谢!
我正在尝试编写就地反向函数并且几乎完全遵循在线代码,但运行以下程序会引发总线错误.我是否将错误的参数传递给reverse()?
void reverse(char *str) {
char * end = str;
char tmp;
if (str) {
while (*end) {
++end;
}
--end;
while (str < end) {
tmp = *str;
*str++ = *end;
*end-- = tmp;
}
}
}
int main() {
char *s = "sample";
reverse(s);
printf("%s\n");
return 1;
}
Run Code Online (Sandbox Code Playgroud) 我有以下代码:
char* str = "01248";
printf("%x \n", str[str[1] + str[3]]);
Run Code Online (Sandbox Code Playgroud)
因为str[1]+str[3] = 101,代码寻找str [101].
这段代码会(总是)得到分段错误错误吗?或者我们在这个地址有变化,我们会打印一些东西?
我正在尝试对c-string进行冒泡排序 - 请参阅下面的函数.目的是根据ASCII码对字符进行排序.
编译器在运行时不会抱怨,此时我会遇到分段错误.我运行了gdb,程序运行正常,直到第12行.在第12行,gdb调试器声明'Process gdb-inferior killed'.
为什么第12行不正确?我在程序的其他地方遇到过这个问题 - 无法将字符分配给c字符串的元素.我知道strcpy()需要字符串赋值,但是对于特定的元素,我认为它没问题.任何帮助很多人赞赏.
1. void bubblesort(char *str)
2. {
3. int length = strlen(str);
4.
5. for (int i = length - 1; i > 0; i--)
6. {
7. for (int j = 0; j < i; j++)
8. {
9. if (str[j] > str[j + 1])
10. {
11. char temp = str[j + 1];
12. str[j + 1] = str[j];
13. str[j] = temp;
14. }
15. }
16. }
17. …Run Code Online (Sandbox Code Playgroud) 我知道怎么在字符串上做,所以"hello world"会"hello world\n".但是,如果我有类似的东西char *str = "helloworld".,我想在str的末尾添加\n,我该怎么做呢?
我编写了以下replace函数来替换大字符串中的子字符串,如下所示:
void replace(char *str1, char *str2, int start, int end)
{
int i,j=0;
for(i=start; i<end; i++, j++)
*(str1+i)=*(str2+j);
}
Run Code Online (Sandbox Code Playgroud)
当我把一个字符串作为时它工作正常replace("Move a mountain", "card", 0,4),但是当我使用指针数组声明一个字符串char *list[1]={"Move a mountain"}并将其传递给函数时replace(list[0], "card",0,4),它给了我一个分段错误.
无法搞清楚.有人可以向我解释一下吗?