前言:我在過去的夏天一直在學C,直到最近纔開始學習C++,所以我現在還不太瞭解它。用ctime保存新的時間點會覆蓋舊的字符串嗎?
我一直在試圖編寫一個C/C++程序,它可以識別窗口中的鼠標右鍵和鼠標點擊,並保存哪個按鈕被點擊,以及什麼時候進入一個指向字符串的指針陣列char **clicks
。我整理這就像一個序列:按鈕,時間,按鈕,時間...
只要檢測到鼠標點擊,它需要無論是「R」或「L」,並做到這一點:
void writeClick(char *button) {
static char **tracker = clicks;
*tracker = button;
tracker++;
time_t seconds = time(NULL);
*tracker = ctime(&seconds);
tracker++;
}
我的問題:您可能已經注意到的問題是,每個數組元素與時間將指向相同的字符串。結果是每次點擊鼠標時都會更新時間,但它只會記住上次保存的時間。我想我可以用strcpy
解決問題,但是如果我想保存多個字符串,那麼我不需要每個字符串都有一個新變量嗎?或者每次都有新的內存位置?我應該怎麼做?
我嘗試使用strcpy
像這樣:
strcpy(*tracker, ctime(&seconds));
但在第二次點擊我的程序崩潰,我不知道爲什麼。
可能有用的其他信息:
我打算將數據發送到VBA,因爲我希望把它變成一個Excel電子表格。
我還沒有寫出我的代碼部分,它會在數組滿滿時動態增加數組,但目前它足夠大(50個元素)以包含數據而不會崩潰,因此我知道這可能不是問題。
檢測鼠標點擊的代碼部分使用Windows函數,除此之外,我認爲我的代碼不受我使用的操作系統的影響。點擊檢測我沒有任何問題(因爲我已經解決了這些問題)。
一位朋友告訴我她只會使用C++字符串和向量來完成這項工作,但我還不知道。我會查找它們,但如果可能的話,我希望找到一個解決方案。
如果你確實是學習C++,也懶得尋找解決_without如果possible_。只需使用可用的正確工具,標準庫,並忘記(char)指針。 – Tas
@Tas除「ctime」是標準庫的一部分外,是可用的正確工具,並使用char指針。把它的返回值拷貝到std :: string沒什麼問題,但是理解爲什麼這是必要的,這將涉及到學習char指針(和靜態變量,這是實際的混淆點)。 – Ray
對不起,我的觀點只是「不用擔心'不使用'std :: string'」,因爲它是正確的工具。最終,OP不需要理解靜態變量或char *或其他任何東西,因爲如果他們剛剛使用了'std :: string',他們就不會遇到這些問題。國際海事組織,只是'std :: string time = ctime(&秒);'不需要理解 – Tas