PDA

View Full Version : سوال: مشکل در الحاق دو رشته



kavehmj
دوشنبه 02 آذر 1394, 00:39 صبح
با سلام.
دوستان من در cpp یه تابع برای خروجی گرفتن تو اکسل نوشتم. به کد زیر:

void OInMatrixFormInExcel(char *FileName, char *MatrixName, long double a[][cc], int row, int col){

//Output Files
strcat(FileName, ".xls");
ofstream Tff(FileName, ios::out);
if (!Tff) { // overloaded ! operator
cerr << "File could not be opened" << endl;
exit(1);
} // end if

Tff << MatrixName << endl;

for (int i = 0; i < row; i++){
for (int j = 0; j < col; j++){
Tff << setw(20) << a[i][j];
}
Tff << endl;
}
}


بعد از کامپایل، این ارور رو مشاهده می کنم:
Error 1 error C4996: 'strcat': This function or variable may be unsafe. Consider using strcat_s instead. To disable deprecation, use _CRT_SECURE_NO_WARNINGS. See online help for details. c:\users\ ...




بعد که تابع strcat رو به صورت strcat_s به کد زیر می نویسم:

void OInMatrixFormInExcel(char *FileName, char *MatrixName, long double a[][cc], int row, int col){

//Output Files
strcat_s(FileName, 500000000, ".xls");
ofstream Tff(FileName, ios::out);
if (!Tff) { // overloaded ! operator
cerr << "File could not be opened" << endl;
exit(1);
} // end if

Tff << MatrixName << endl;

for (int i = 0; i < row; i++){
for (int j = 0; j < col; j++){
Tff << setw(20) << a[i][j];
}
Tff << endl;
}
}




برنامه کامپایل و اجرا می شه. اما به هنگام اجرای این تابع، این ارور رو می ده:

136982


و بعد از زدن گزینه break و بستن کنسول، کرسل می ره رو اول این خط:
strcat_s(FileName, 500000000, ".xls");

یعنی پشت تابع strcat_s قبل از جاخالی هاش.





ممنون می شم که من رو برای رفع این مشکل راهنمایی کنید.


با تشکر

negative60
دوشنبه 02 آذر 1394, 11:15 صبح
برای کار با رشته میتونید از string استفاده کنید وقتی‌ با زبان ++C برنامه می‌نویسید پس بهتره از توابع و امکانات خود ++C استفاده کنید, مگر اینکه واقعا لازم باشه به صورت C کد بنویسید.

شما فضای لازم برای نوشتن و اضافه کردن رشته رو در نظر گرفتید؟ اگر نکردید این این مثال (http://www.cplusplus.com/reference/cstring/strcat/) رو ببینید

همچنین برای تابع strcat_s هم باید به این شکل انجام بدید
آرگومان اول رشته منبع، آرگومان دوم اندازه طول رشته منبع، آرگومان سوم رشته مقصد(رشته جدید)
char buf[20];
strcpy_s(buf, sizeof(buf), "salam ");
strcat_s(buf, sizeof(buf), "chetori?");
printf("%s\n", buf);

kavehmj
دوشنبه 02 آذر 1394, 12:20 عصر
برای کار با رشته میتونید از string استفاده کنید وقتی‌ با زبان ++C برنامه می‌نویسید پس بهتره از توابع و امکانات خود ++C استفاده کنید, مگر اینکه واقعا لازم باشه به صورت C کد بنویسید.

شما فضای لازم برای نوشتن و اضافه کردن رشته رو در نظر گرفتید؟ اگر نکردید این این مثال (http://www.cplusplus.com/reference/cstring/strcat/) رو ببینید

همچنین برای تابع strcat_s هم باید به این شکل انجام بدید
آرگومان اول رشته منبع، آرگومان دوم اندازه طول رشته منبع، آرگومان سوم رشته مقصد(رشته جدید)
char buf[20];
strcpy_s(buf, sizeof(buf), "salam ");
strcat_s(buf, sizeof(buf), "chetori?");
printf("%s\n", buf);

ممنون. مشکل تو همون عدم استفاده از فضای ذخیره سازی و همچنین تابع sizeof(buf) بود.
تشکر مجدد از راهنماییتون :)