0

関数を使用してstrstr()いますが、クラッシュしています。

コードのこの部分は、「場所 0x0000006c を読み取っているアクセス違反」というエラーでクラッシュしています strstr(p_czCharactersToDelete, (const char*)p_czInputString[index]))

これが完全なコードです...

#include "stdafx.h"    
#include <iostream>
#include <string>
void delchar(char* p_czInputString, const char* p_czCharactersToDelete)
{
    for (size_t index = 0; index < strlen(p_czInputString); ++index)
    {
        if(NULL != strstr(p_czCharactersToDelete, (const char*)p_czInputString[index]))
        {
            printf_s("%c",p_czInputString[index]);

        }
    }
}
int main(int argc, char* argv[])
{
    char c[32];
    strncpy_s(c, "life of pie", 32); 
    delchar(c, "def");

    // will output 'li o pi'
    std::cout << c << std::endl;
}
4

2 に答える 2

2

のプロトタイプstrstr()は次のとおりです。

char * strstr ( char * str1, const char * str2 );

この関数は、メイン文字列から部分文字列を見つけるために使用されます。str2inの最初のオカレンスへのポインタを返すか、が の一部でないstr1場合はヌル ポインタを返します。str2str1

あなたの場合、間違ったパラメータをに渡していますstrstr()。を呼び出していますが strstr(p_czCharactersToDelete, (const char*)p_czInputString[index]));、これは誤りです。ポインターp_czCharactersToDeleteがサブ文字列定数をp_czInputString指し、メイン文字列を指しているためです。strstr()asを呼び出してstrstr(p_czInputString, p_czCharactersToDelete);、関数内で対応する変更を行いますdelchar()

于 2013-05-25T12:14:05.707 に答える
1

あなたは間違ったを使用していstrstrます。strchrおそらくまたはが必要ですstrpbrk

#include <cstring>
#include <algorithm>

class Include {
public:
    Include(const char *list){ m_list = list; }

    bool operator()(char ch) const
    {
        return ( strchr(m_list, ch) != NULL );
    }

private:
    const char *m_list;
};

void delchar(char* p_czInputString, const char* p_czCharactersToDelete){
    Include inc(p_czCharactersToDelete);
    char *last = std::remove_if(p_czInputString, p_czInputString + strlen(p_czInputString), inc);
    *last = '\0';
}
于 2013-05-25T12:22:58.353 に答える