文字列の繰り返し文字を消去する関数を取得するはずです。私のコードは次のとおりです。別の関数で関数を呼び出す:セグメンテーションフォールト(コアダンプ)
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#define DIM 100
char* mystrcpy(char [], char[]);
char* repeticoes(char []);
int main()
{
char str1[DIM]="John Joanne";
printf("%s", repeticoes(str1));
return EXIT_SUCCESS;
}
char* mystrcpy(char _dest[], char _orig[])
{
int i=0;
for (i=0; _orig[i]!='\n'; i++)
_dest[i]=_orig[i];
_dest[i]='\0';
return _dest;
}
char* repeticoes(char _s[])
{
int i=0,j=0;
char news[DIM]={'\0'};
for (i=0, j=0; _s[i]!='\0'; i++)
{
if(mystrcnt(_s, _s[i])==1)
news[j++]=_s[i];
}
news[j]='\0';
mystrcpy(_s, news);
return _s;
}
mystrcpyは前の練習で作成した関数です。 問題は、セグメンテーションフォルト(コアがダンプされています)を取得していることです。 しかし、文字列ライブラリ関数strcpyを使用しようとすると、プログラムが正常に実行されます。では、私の機能には何が問題なのですか?私は、文字列を正しく引数として宣言/初期化/渡していませんか?
ありがとうございます!
編集:str1を示すのを忘れました。あなたの関数で
少なくとも完全に動作する例を提供します。問題はおそらく境界チェックが不完全であることでしょう。デバッガで実行します。 – csl
あなたが提示したコードが私のためにコンパイルされていないので、セグメンテーションフォルトを報告するのは驚くべきことです。確かに、あなたのコンパイラは宣言されていない(そして初期化されていない)変数の使用について警告しました。 –
mystrcnt関数も表示 – Sniper