PDA

View Full Version : سوال: مشکل با اشاره گر



Hello,World!!
پنج شنبه 29 مهر 1389, 14:41 عصر
سلام به همه دوستان. من یک تابع دارم که آرگومتن ورودی اون یه char** هستش حالا می خوام چک کنم که خونه اول این آرایه چیه؟ من از کد [0]char** استفاده می کردم و جواب می داد اما الان همون کد رو بدون هیچ تغییری اجرا می کنم ولی کامپایلر این خطا رو میده:
invalid type argument of ‘unary *’ (have ‘int’)
واقعاْ نمیدونم چی شد یه دفعه چون من اصلاْ کد رو تغییر ندادم ولی قبلاْ خطا نداشت. واقعاْ ممنون می شم دوستان راهنماپی کنن

Salar Ashgi
پنج شنبه 29 مهر 1389, 15:52 عصر
سلام ؛
کدتان را قرار دهید تا بررسی شود ./

Hello,World!!
پنج شنبه 29 مهر 1389, 18:09 عصر
#include <stdio.h>
#include <stdlib.h>
#include <sys/types.h>
#include <unistd.h>

void parse ( char * , char ** );
void execute ( char ** );


int main()
{
system("clear");
char input[1024];
char * arg[64];
while(1)
{
printf ("shell>");
gets(input);
printf("\n");
parse ( input , arg );
if ( strcmp ( arg[0] , "exit" ) == 0 )
exit(0);
execute ( arg );
}
}
void parse ( char * input , char ** arg )
{
while ( *input != '\0' )
{
while ( *input == ' ' || *input == '\t' || *input == '\n' )
*input++ = '\0';
*arg++ = input;
while ( *input != '\0' && *input != '\n' && *input != '\t' && *input != ' ' )
input++;
}
*arg = '\0';
}
void execute ( char ** arg )
{
pid_t pid;
int status;
if ( (pid = fork()) < 0 ){
printf ("ERROR:: can not execute!\n");
exit (1);
}
else if ( pid == 0 )
{
if ( strcmp (**arg[0] , "dirr") == 0 ){
char* buf;
char* pointer;
pointer = getcwd (buf , 1024);
}
if ( execvp (*arg , arg) < 0){
printf( "ERROR:: can not execute the ins..\n");
exit(1);
}
}
else
while ( wait (&status) != pid);

}



توی تابع execute می خوام اگه آرگومان اول dirr بود پوشه جاری نشون داده بشه اینجوری که نوشتم اول جواب می داد اما الان خطا می ده!

Hello,World!!
پنج شنبه 29 مهر 1389, 18:13 عصر
دوستان همین الان دوباره امتحان کردم و جواب میده و مشکلی هم نداره. چرا اینجوریه؟ ممنون میشم راهنمایی کنید

Salar Ashgi
پنج شنبه 29 مهر 1389, 18:32 عصر
اگر اطلاعات قراره از جایی خونده بشن ، ممکنه در انتخاب Path و ... اشتباه بوجود اومده باشه و یا اینکه
ممکنه در یک قسمت از کدتون اشکالی حالا مثلا از نوع تایپی و ... بوجود اومده باشه ./

Hello,World!!
پنج شنبه 29 مهر 1389, 18:46 عصر
فهمیدم مشکل کی ایجاد میشه. من همین شرط رو توی تابع execute واسه تابع chdir هم می خوام. این کد


if ( strcmp ( **arg[0] , "cd") == 0){
int result;
result = chdir ( **arg[1] );

اینو که اضافه می کنم اون خطا رو می گیره در صورتی که به نظر درست میاد. مشکلاتی که فرمودین رو نداره کاملاْ چک کردم

Mokhless
پنج شنبه 29 مهر 1389, 19:11 عصر
فهمیدم مشکل کی ایجاد میشه. من همین شرط رو توی تابع execute واسه تابع chdir هم می خوام. این کد


if ( strcmp ( **arg[0] , "cd") == 0){
int result;
result = chdir ( **arg[1] );

اینو که اضافه می کنم اون خطا رو می گیره در صورتی که به نظر درست میاد. مشکلاتی که فرمودین رو نداره کاملاْ چک کردم

به نظرم اگه یه دونه از اون ستاره ها رو حذف کنی درست بشه !

Hello,World!!
پنج شنبه 29 مهر 1389, 19:31 عصر
نه درست نمیشه. اگه این کارو کنم دیگه برنامه به درستی اجرا نمیشه

milad36_cpp
پنج شنبه 29 مهر 1389, 20:11 عصر
باید ** ها رو برداری.




if ( strcmp ( arg[0] , "cd") == 0){
int result;
result = chdir ( arg[1] );

Salar Ashgi
پنج شنبه 29 مهر 1389, 22:04 عصر
در صورتی که به نظر درست میاد

مطمئنا اینطور نخواهد بود ؛ چون کدتان طولانی بود و قسمتی که مربوط به خطا دادن ، میشد ، مطرح نکرده
بودید ، ولی حالا که ذکر کردید :
تابع strcmp دو رشته رو میتونه مقایسه کنه ، در حالیکه شما یک آرگومان تابع رو بشکل یک آرایه دو بعدی
بهش پاس می دهید ، و این یعنی خطا !
موفق باشید ./