Может кто-нибудь сказать, пожалуйста, что не так с этим кодом?

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

using namespace std;

void OpCode()
{
string mnemonic;
int hex;
char *op;

cout << "Entre mnemonic : ";
cin >> mnemonic;

char *str1 = strdup(mnemonic.c_str());

if(strcmp(str1, "ADD") == 0)
{
hex = 24;
itoa(hex,op,16);
cout << op;
cout << "\nEqual";
}
else
cout << "\nFalse";
}

int main()
{
OpCode();
return 0;
}

Он работает до той части, где я использую переменную op, я пытался скопировать и вставить в основную функцию, она работала отлично, почему это не работает в функции OpCode ?! заранее спасибо

-2

Решение

itoa записывает в память, на которую указывает его второй аргумент. Он не выделяет эту память сама. Это означает, что вы должны передать ему действительный указатель памяти. Вы не; Вы никогда не выделяете память. Это сработало, когда по счастливой случайности не дизайн.

Простой способ будет заменить строку, где вы определяете op в char op[9]; но помните, что это локально выделенная память, поэтому вы не можете вернуть ее из функции.

1

Другие решения

Вот исправление с комментариями

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

using namespace std;

void OpCode()
{
string mnemonic;
int hex;
char op[10];  // allocate a pointer op that points to 10 empty spaces of type char.

cout << "Entre mnemonic : ";
cin >> mnemonic;

char *str1 = strdup(mnemonic.c_str());

if(strcmp(str1, "ADD") == 0)
{
hex = 24;
itoa(hex,op,16);   // convert hex to an ASCII representation and write the ASCII to the 10 empty spaces we allocated earlier.
cout << op;
cout << "\nEqual";
}
else
cout << "\nFalse";
free (str1); // free the memory that was allocated using strdup so you do not leak memory!
}

int main()
{
OpCode();
return 0;
}
0

По вопросам рекламы [email protected]