c++ - Converting int to char* -
i'm creating matrix multiplied one. matrix values arguments (*argv[]).
until created this:
for(int i=0; i<2; i++) { for(int j=0; j<2; j++) { sec[i][j]=argv[gv]; gv++; } } for(int i=0; i<2; i++) { for(int j=0; j<2; j++) { int = (int)fir[i][j]; int b = (int)sec[i][j]; int r = a*b; res[i][j]=(char)(r); //the problem here } cout<<endl; } the problem code crashes when want show matrix. problem can in marked place.
any ideas how solve simple problem? :)
thanks in advance!
the problem asked about
as didn't show declarations can't tell sure, if crash occurs @ indicated position didn't reserve enough space res. sure declared this?
char res[2][2]; other problems
i'm not sure trying in first loop, if if the identifier argv references parameter passed main in:
int main (int argc, char *argv[]) argv array of pointers strings not array of value of first character contained in strings. you'll filling sec array more or less random values chosen os , abi adheres to store parameters passed function @ location.
essentially setup looks this:
+---------> "my_program" argv -> +--------------+ / @ anywhere in memory | argv [0] ------+ +--------------+ +----> "paramter argc-2" | argv [1] ---------+ / @ location in memory +--------------+ \ | ... | / +-----> "paramter 1" +--------------+ / @ other location again | argv[argc-1] |----+ +--------------+ while @ locations performing calculations with.
don't misinterpret << output
while using constructs like
std::cout << argv[1]
will produce same output as:
std::cout << 12
if called program 12 first parameter both seem more or less identical definately not! overloaded << makes them appear same.
nevertheless << toggle different code when called on object of type char* toggled, when run on object of type int.
the difference example
you might want check following snippet see difference in action:
#include <iostream> #include <stdio.h> int main (int argc, char *argv[]) { int k; (k=0; k<argc; ++k) std::cout << k << ": " << argv[k] << "\n"; (k=0; k<argc; ++k) printf ("%d: %d\n", k, (int) argv[k]); return 0; } running generated code ./my_program 12 27 42 produce output following:
0: ./my_program 1: 12 2: 27 3: 42 0: -1079747848 1: -1079747840 2: -1079747837 3: -1079747834 quite difference, results fact when faced value of type char* << "knows" has perform different action when faced value of type int.
by "telling" implementation in second loop right action perform:
(k=0; k<argc; ++k) printf ("%d: %s\n", k, argv[k]); you'll same output second loop.
those strange numbers of first output resulted interpreting bitpatterns used represent pointers paramters passed main (bitpatterns) of integers.
typecasting (unsigned) instead , using "%x" instead of "%d" have made more obvious giving following output:
0: bf92bae9 1: bf92baf6 2: bf92baf9 3: bf92bafc as can see "cheated" little bit in picture exaggerating randomness of memory locations.
if count indices of you'll find in example os placed parameters (including termination \0 characters) 1 after other.
Comments
Post a Comment