Je suis en train d'utiliser strstr fonction comme ceci:test si strstr retourner un pointeur valide
const char * pInicio = strstr(origem, chave);
if (pInicio != NULL) ...
Contrairement à l'attendu, quand je fais le « si » le compilateur génère une exception de violation de la position d'accès. Cela se produit chaque fois que j'essaie d'obtenir un mot clé qui n'existe pas dans une chaîne.
La pile d'appel est:
ntdll.dll!779315de()
[Os quadros abaixo podem estar incorretos e/ou ausentes, nenhum símbolo foi carregado para ntdll.dll]
ntdll.dll!779315de()
ntdll.dll!7792014e()
> msvcr100d.dll!_output_l(_iobuf * stream, const char * format, localeinfo_struct * plocinfo, char * argptr) Linha 2361 + 0xa bytes C++
cccccccc()
La sortie était:
Exceção de primeira chance em 0x0f8620a7 (msvcr100d.dll) no TestesApp.exe: 0xC0000005: Violação de acesso ao ler o local 0x00000001.
Exceção sem-tratamento em 0x779315de no TestesApp.exe: 0xC0000005: Violação de acesso ao ler o local 0x00000001.
Juste avant l'exception, les valeurs des variables sont:
- Chave: 0x00196f64 "$ GNGSA" type: char *
- Origine: 0x00196840 "$ GPRMC, 000651.082, V ,,,,,,, 19 1210 ,,, N * 4F $ GPGGA, 000652,091 ,,,,, 0,00 ,,, M, 0,0, M ,, 0000 * 5F $ GPGSA, A, 1 ,,,,,,,,,,,, ,,, * 1E » type: const char *
- pInicio: 0x00000000 invalide> Type: const char *
la ligne de commande de liaison est:
/OUT:"C:\Users\Leandro\documents\visual studio 2010\Projects\TestesApp\Debug\TestesApp.exe" /INCREMENTAL /NOLOGO "kernel32.lib" "user32.lib" "gdi32.lib" "winspool.lib" "comdlg32.lib" "advapi32.lib" "shell32.lib" "ole32.lib" "oleaut32.lib" "uuid.lib" "odbc32.lib" "odbccp32.lib" /MANIFEST /ManifestFile:"Debug\TestesApp.exe.intermediate.manifest" /ALLOWISOLATION /MANIFESTUAC:"level='asInvoker' uiAccess='false'" /DEBUG /PDB:"C:\Users\Leandro\documents\visual studio 2010\Projects\TestesApp\Debug\TestesApp.pdb" /SUBSYSTEM:CONSOLE /PGD:"C:\Users\Leandro\documents\visual studio 2010\Projects\TestesApp\Debug\TestesApp.pgd" /TLBID:1 /DYNAMICBASE /NXCOMPAT /MACHINE:X86 /ERRORREPORT:QUEUE
aussi le c/C++ ligne de commande est
/ZI /nologo /W3 /WX- /Od /Oy- /D "WIN32" /D "_DEBUG" /D "_CONSOLE" /D "_UNICODE" /D "UNICODE" /Gm /EHsc /RTC1 /GS /fp:precise /Zc:wchar_t /Zc:forScope /Fp"Debug\TestesApp.pch" /Fa"Debug\" /Fo"Debug\" /Fd"Debug\vc100.pdb" /Gd /analyze- /errorReport:queue
Ensuite, j'essaie de tester le pointeur s'il est nul. C'est mon problème maintenant, comment résoudre ce problème?
Meilleures salutations!
Ne ressemble pas à ce code. Etes-vous sûr que les paramètres de 'strstr' sont valides? –
Etes-vous sûr que l'erreur se produit sur la ligne 'if'? – Barmar
Si vous obtenez une violation d'accès de la part de 'strstr()', les adresses que vous passez ne sont pas valides ou les chaînes référencées ne sont pas terminées. Je vous suggère de valider les deux conditions * avant de conclure que quelque chose ne va pas avec le code ci-dessus. – WhozCraig