相关疑难解决方法(0)

为什么这个字符串反转C代码会导致分段错误?

我正在尝试编写代码来反转字符串(我只是想在C编程和指针操作方面做得更好),但我无法弄清楚为什么我会遇到分段错误:

#include <string.h>

void reverse(char *s);

int main() {
    char* s = "teststring";
    reverse(s);

    return 0;
}

void reverse(char *s) {
    int i, j;
    char temp;

    for (i=0,j = (strlen(s)-1); i < j; i++, j--) {
        temp = *(s+i);     //line 1
        *(s+i) = *(s+j);   //line 2
        *(s+j) = temp;     //line 3
    }
}
Run Code Online (Sandbox Code Playgroud)

它是第2行和第3行导致分段错误.我知道可能有更好的方法来做到这一点,但我有兴趣找出我的代码中特别导致分段错误的内容.

更新:我已根据要求包含了调用函数.

c string segmentation-fault

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

为什么修改字符串的代码不起作用?

对于c样式的字符串,如何将字符指针指向的内存地址赋予char?例如,在下面的示例中,我想将num更改为"123456",因此我尝试将p设置为'0'所在的数字,并尝试用'4'覆盖它.谢谢.

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

int main()
{
    char* num = (char*)malloc(100);
    char* p = num;

    num = "123056";

    p = p+3;    //set pointer to where '4' should be
    p = '4';

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

    return 0;
}
Run Code Online (Sandbox Code Playgroud)

c pointers char segmentation-fault access-violation

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

调用该函数会出现错误;这怎么解释?

我创建的函数(我将其称为 )string_deletion删除出现的特定子字符串,并将字符串向左移动子字符串的长度。该函数接受两个参数:指向数组中遇到子字符串的第一个字母的位置的指针,以及单词的长度。

这是函数:

void string_deletion(char *s, int m)
{
    char *index=s+m;
    while(*index!=0)
    {
        *(index-m)=*(index++);
    }
    *(index-m)=0;
}
Run Code Online (Sandbox Code Playgroud)

该函数将子字符串后面的所有字符向左移动一定量,该量取决于子字符串的长度,用 表示m。我已将index指针设置为指向子字符串出现后立即出现的字符,这是移位开始的标记。执行循环直到NUL遇到字符,然后退出循环。在顶点处,NUL被附加到字符串的末尾。

尽管主代码的其他部分无缝工作,但在必要时调用此特定函数会使程序停止工作并产生错误。这怎么解释呢?

这是完整的代码:

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

int string_len(char *s)
{
    int i=0;
    char *m=s;
    while(*m!=0)
    {
        i++;
        m++;
    }
    return i;
}
void word_enter(char *word_search)
{
    char r;
    char *m=word_search;
    while((r=getchar())!=EOF)
    {
        if(r=='\n')
        {
            *m=0;
            break;
        }
        else
        {
            *(m++)=r;
        }
    }
}
 
void string_disp(char *s)
{
    char *d=s;
    while(*d!=0)
    { …
Run Code Online (Sandbox Code Playgroud)

c arrays pointers function

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

为什么tolower()会影响其他字符串?

为什么这个程序的输出始终是:

example 

example
Run Code Online (Sandbox Code Playgroud)

如果我用for循环中的第二个更改第一行,那么输出将如下所示:

EXAMPLE

EXAMPLE
Run Code Online (Sandbox Code Playgroud)

我做错了什么?

string key = "EXAmple";
string ukey = key; 
string lkey = key;

for (int i = 0; i < strlen(key); i++)
{
  ukey[i] = toupper(key[i]); 
  lkey[i] = tolower(key[i]);
}       

printf("%s\n", ukey);
printf("%s\n", lkey);
Run Code Online (Sandbox Code Playgroud)

c

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