strcat给我一个分段错误错误

时间:2015-09-22 20:21:42

标签: c arrays char append strcat

在验证strcat是发生错误的位置之后,然后检查我的作业中的上一个示例。在我之前的例子中,我使用strcat(实际上是strncat)的方式和我下面的代码一样。我不太确定。

我的程序的目的是遍历“string”并从字符串中删除字符“c”的任何出现。

main.c中:

 char string[100]={0}, c[3];

 printf("Enter a String: ");
 fgets(string, 100, stdin);
 if (string[98] == '\n' && string[99] == '\0') { while ( (ch = fgetc(stdin)) != EOF && ch != '\n'); }

 printf("Enter a Char: ");
 fgets(c, 2, stdin);
 while ( (ch = fgetc(stdin)) != EOF && ch != '\n');

 rmchr(string, c[0]); 

头:

rmchr(char *string, char c)
{ 
  int i=0;
  char *word[100];

  int s = strlen(string);

  for(i=0; i<=(s-2); i++)
  {
    if(string[i] != c)
    {
      strcat(word, string[i]);
    }
  }  
}

3 个答案:

答案 0 :(得分:2)

char *word[100];

它会在你的程序中保存一个字符串,所以请使用:

char word[100];

char的数组,而不是char *的数组。

然后strcat连接到一个字符串,但word未初始化。使用以下字符串创建一个字符串:

word[0] = '\0';

然后string[i]是一个字符,但是strcat需要指向字符参数的指针:使用指针使用&string[i]

最后你的rmchr函数中的问题是它必须通过参数或通过return语句返回一些东西,但它不会。

答案 1 :(得分:0)

这里提到的不止一点,比如

  1. rmchr()定义应该有一个返回类型,如果您没有返回任何内容,可能会void

    [ FWIW,在这种情况下,我是谁,你将如何利用局部变量word ]

    < / LI>
  2. rmchr()内,word需要是char s的数组,而不是char指针。您需要将char * word[100]更改为char word[100]

  3. strcat()中,两个参数都需要是一个指针。在这种情况下,您需要使用&string[i]

答案 2 :(得分:0)

以下似乎编译正常,但你的代码并没有完全按照你所说的去做,“我的程序的目的是遍历”string“并从字符串中删除任何字符'c'。”该函数不会删除该字符或返回包含该字符的字符串副本。我写了一个函数,在删除字符后复制字符串并返回指向它的指针。下面是你的代码有点修改,在它下面是我的功能

alert($("#code1").data("code").split(";")[0]);
alert($("#code2").data("code").split(";")[0]);
alert('test');

你去,有一个演示主

//Just a compilable version of your code, not sure if it does what u want
#include <stdio.h>
#include <string.h>

void rmchr(char *string, char c)   
{ 
    int i=0;
    char word[100];

    int s = (int)strlen(string);

    for(i=0; i<=(s-2); i++)
    {
        if(string[i] != c)
        {
            strcat(word, (char *)(&string[i]));
        }
    }  
}

int main(int argc, const char * argv[]) {
    char string[100] = {0}, c[3];
    char ch;

    printf("Enter a String: ");
    fgets(string, 100, stdin);
    if (string[98] == '\n' && string[99] == '\0') { 
       while ( (ch = fgetc(stdin)) != EOF && ch != '\n'); 
    }

    printf("Enter a Char: ");
    fgets(c, 2, stdin);
    while ( (ch = fgetc(stdin)) != EOF && ch != '\n');

    rmchr(string, c[0]); 

    return 0;
}