View Full Version : سوال: بازگشت رشته از تابع system()
Salar Moghaddam
جمعه 23 اسفند 1392, 16:02 عصر
سلام دوستان
می خوام از تابع system یه دستور بش رو اجرا کنم و خروجیش رو بریزم تو یه متغیر از نوع رشته، مثلا:
#include <iostream>
#include <stdlib.h>
using namespace std;
int main() {
string a;
a = system("ls");
cout << a << endl;
اما خطای نوع داده میگیره چون خروجی این تابع همراه با عددی نشانگر درستی اجرای کامنده، یعنی دستور system بالا خروجی زیر رو تولید می کنه:
Acc.ac a.out main.cpp
0
اون 0 کار رو خراب می کنه، چجوری حذفش کنم؟
ممنون
negative60
جمعه 23 اسفند 1392, 19:52 عصر
خروجی system از نوع int هست
Salar Moghaddam
جمعه 23 اسفند 1392, 20:02 عصر
خروجی system از نوع int هست
چجوری خروجی مورد نظرمو بگیرم؟
اصل کاری که می خوام بکنم اینه:
echo $DESKTOP_SESSION
negative60
جمعه 23 اسفند 1392, 20:55 عصر
خروجی اين تابع
system فکر ميکنم برای اين هست به بدونيد دستوری که استفاده کرديد به درستی اجرا شده يا خير.
int a;
a = system("dir");
if( a == 0)
{
//Be drorosti ejra shod
}else{
//Ejra nashod
}
DESKTOP_SESSION يعنی چی ؟ درست توضيح بديد.
rahnema1
جمعه 23 اسفند 1392, 21:12 عصر
اگه می خواهید متغیر محیطی به دست بیارید از getenv استفاده کنید
#include <stdio.h>
#include <stdlib.h>
int main ()
{
char* desk = getenv ( "DESKTOP_SESSION" );
printf("\n%s\n",desk);
return 0;
}
Salar Moghaddam
جمعه 23 اسفند 1392, 21:20 عصر
پس کلا تو سی پلاس پلاس نمیشه مستقیم با تابعی نتیجه رو به شکل رشته ریخت تو یک متغیر، با کمی جست و جو به نتیجه ی زیر رسیدم:
FILE *fp = popen("echo $DESKTOP_SESSION", "r");
char buffer[128];
while (fgets(buffer, sizeof(buffer), fp))
{
//empety body
}
اینجا متغیر رو با buffer بدست میاریم، ولی اصا کد خوبی نیست، کسی ایده بهتری داره؟
ممنون
motherboard
جمعه 23 اسفند 1392, 22:05 عصر
سلام دوستان
می خوام از تابع system یه دستور بش رو اجرا کنم و خروجیش رو بریزم تو یه متغیر از نوع رشته، مثلا:
#include <iostream>
#include <stdlib.h>
using namespace std;
int main() {
string a;
a = system("ls");
cout << a << endl;
اما خطای نوع داده میگیره چون خروجی این تابع همراه با عددی نشانگر درستی اجرای کامنده، یعنی دستور system بالا خروجی زیر رو تولید می کنه:
Acc.ac a.out main.cpp
0
اون 0 کار رو خراب می کنه، چجوری حذفش کنم؟
ممنون
سلام من این کارو کردم تا اون صفره حذف بشه.
#include <iostream>
#include <stdlib.h>
#include <conio.h>
using namespace std;
int main() {
string a;
a = system("ls");
cout << char() << endl;
getch();
return 0;}
omid_kma
شنبه 24 اسفند 1392, 12:02 عصر
اصولا استفاده از system درست نیست چون باعث میشه برنامه دیگه cross platform نباشه
این تاپیک رو ببینید فکر کنم همون چیزی باشه که پرسیدین :
http://www.7khatcode.com/2120/%D8%A7%D8%AC%D8%B1%D8%A7%DB%8C-%D8%AF%D8%B3%D8%AA%D9%88%D8%B1%D8%A7%D8%AA-dos-%D9%88-cmd-%D8%AF%D8%B1-c-%D8%A8%D9%87-%D8%B5%D9%88%D8%B1%D8%AA-%DA%A9%D8%AF-%D9%86%D9%88%DB%8C%D8%B3%DB%8C
vBulletin® v4.2.5, Copyright ©2000-1403, Jelsoft Enterprises Ltd.