所以在我的程序中,我应该让用户输入一个基数,最多基数为32,并且要转换一个随机十进制值。因此,如果用户输入5和10,则必须在基数5,4,3和2中打印到屏幕10.但是,这是我第一次使用动态分配,因此我得到了奇怪的错误,并且这是我无法解决的问题。 (d代表十进制值,b代表base,arrayPtr代表我的动态分配数组)
$ awk '{print gensub(/(....)\/(..)\/(..)/,"\\3/\\2/\\1",1)}' file
08/04/2012 15:00,207
08/04/2012 16:00,180
$ awk 'match($0,/(....)\/(..)\/(..)(.*)/,a){ print a[3]"/"a[2]"/"a[1] a[4] }' file
08/04/2012 15:00,207
08/04/2012 16:00,180
$ sed -r 's#(....)/(..)/(..)#\3/\2/\1#' file
08/04/2012 15:00,207
08/04/2012 16:00,180
我收到错误(类型' const char [3]'以及' int *'到二进制'运算符*')的操作数无效在线上说: cout<<&#;" Base"<(arrayPtr +(isizeof(* arrayPtr)))<<&#; &#34 ;; 有人能帮助我理解为什么会这样吗?
答案 0 :(得分:2)
你错过了<<
和": "
之间的*(...)
,所以编译器试图将": "
乘以parens中表达式的值。
//---------------------v
cout<<"Base "<<i <<": "*(arrayPtr+(i*sizeof(*arrayPtr)))<<" ";
应该阅读
cout<<"Base "<<i <<": "<<*(arrayPtr+(i*sizeof(*arrayPtr)))<<" ";
//---------------------^^
这就是为什么人们倾向于在操作员之间放置空格,以便更容易发现这样的错误。
cout<<"Base "<<i<<": "*(arrayPtr+(i*sizeof(*arrayPtr)))<<" ";
//vs
cout << "Base " << i << ": " << *(arrayPtr + (i * sizeof(*arrayPtr))) << " ";