最近在自學程式語言, 使用VS2019遇到了幾個問題想請各位大大幫忙解答
struct _timeb timebuffer;
_ftime_s(&timebuffer);
char timeline[26];
ctime_s(timeline, 26, &(timebuffer.time));
printf("The time is %.19s.%hu %s", timeline, timebuffer.millitm,&timeline[20]);
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <io.h>
#include <windows.h>
void cFList(char* _a) {
struct _finddata_t file;
intptr_t hFile=0;
wchar_t dirPath[512] = { 0 };
wchar_t buff[200] = L"D:\\*.*";
if ((hFile = _wfindfirst(buff, &file)) == -1)
{
perror("path error"), exit(1);
}
}
int main(int argc, char const* argv[]) {
wchar_t dirPath1[200] = L"D:\\";
wchar_t extenName1[200] = L"*.*";
char a[100] = "D:\\";
cFList(a);
return 0;
}
麻煩知道的高手解答一下, 謝謝
- C 有沒有比較正規做多 THREAD 的函式, 在VS上 pthread.h 要另外裝, 用x64的電腦還需要再下載其他DLL檔, 這樣不直覺的作法是不是C有其他自己的函式庫或我搞錯什麼了?
C 沒有提供管理多執行緒的函式,通常會使用第三方函式庫(例如 pthread)或作業系統 API 實作多執行緒操作。pthread 是一個常用且跨平台的多執行緒函式庫,需要另外安裝,但它提供一個統一的介面來管理多執行緒。在 Visual Studio 中使用 pthread 可能需要額外下載 DLL,但透過使用第三方函式庫來管理多執行緒是一種通用的方法。
- C 取得系統時間目前查到使用下面這種作法, 有沒有更有效率的方法能取到精準到微秒
您提到的程式碼使用 _ftime_s
函式來取得系統時間,但精確度僅到毫秒。如果需要精確到微秒,可以使用其他函式,例如:
<time.h>
和 <sys/time.h>
兩個函式庫來呼叫,精確度更高,可以達到 nanoseconds。<Windows.h>
函式庫來呼叫,精確度更高,可以達到 nanoseconds。
- _wfindfirst 的用法, 以下是我的 code, 只要 cFList(char* _a)執行完 _wfindfirst(buff, &file))且成功, 我帶入的 _a 位址就會消失(若傳址, 傳多個參數到cFList()位址也都會消失), 但若是使用_findfirst()就很正常, 可是因為我需要開簡體字檔案所以需要特別使用 wchar_t 型態去編碼所以還是需要用 _wfindfirst
這是因為_wfindfirst會改變傳遞給它的參數的值,導致這個參數的位址上的內容消失。在本例中,你傳遞的是char類型的參數,但_wfindfirst需要的是wchar_t類型的參數。解決這個問題的方法是將傳遞給cFList的參數轉換為wchar_t類型,並在cFList函數內替換_wfindfirst和_findfirst。
void cFList(wchar_t* _a)
{
struct _wfinddata_t file;
intptr_t hFile=0;
wchar_t buff[200];
wcscpy_s(buff, 200, _a);
wcscat_s(buff, 200, L"\\*.*");
if ((hFile = _wfindfirst(buff, &file)) == -1)
{
perror("path error"), exit(1);
}
}
int main(int argc, char const* argv[])
{
wchar_t dirPath1[200] = L"D:\\";
wchar_t extenName1[200] = L"*.*";
wchar_t a[100] = L"D:\\";
cFList(a);
return 0;
}