#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 ?! заранее спасибо
itoa
записывает в память, на которую указывает его второй аргумент. Он не выделяет эту память сама. Это означает, что вы должны передать ему действительный указатель памяти. Вы не; Вы никогда не выделяете память. Это сработало, когда по счастливой случайности не дизайн.
Простой способ будет заменить строку, где вы определяете op
в char op[9];
но помните, что это локально выделенная память, поэтому вы не можете вернуть ее из функции.
Вот исправление с комментариями
#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;
}