作者lazy0813 (菜邊巴)
看板C_and_CPP
標題[問題]chdir函數一些小問題
時間Thu Dec 10 16:58:59 2020
開發平台(Platform): (Ex: Win10, Linux, ...)
Win10
編譯器(Ex: GCC, clang, VC++...)+目標環境(跟開發平台不同的話需列出)
Dev-C++5.11
額外使用到的函數庫(Library Used): (Ex: OpenGL, ...)
unistd.h
問題(Question):
chdir在unistd.h裡面是 int chdir(const char *path)
所以我想說能不能在CMD上輸入位址給chdir的引數讀取
因為陣列本身就是指標函數,我想說那不是可以直接依址取值就好了
請教各位大神。
程式碼(Code):(請善用置底文網頁, 記得排版,禁止使用圖檔)
#include <stdio.h>
#include <unistd.h>
int main()
{
char buf[80];
printf("input folder address:");
scanf("%s",&buf);
chdir(*buf);
system("pause");
return 0;
}
--
※ 發信站: 批踢踢實業坊(ptt.cc), 來自: 140.113.134.82 (臺灣)
※ 文章網址: https://webptt.com/m.aspx?n=bbs/C_and_CPP/M.1607590741.A.A71.html
1F:推 LPH66: 請回去讀 C 語言教材裡有關字串的部份 12/10 17:41
→ LPH66: chdir 的引數是一個 C-style 字串
字串是字元陣列吧 12/10 17:42
2F:→ descent: 你是要改變目前的工作目錄嗎? 這樣是做不到的, 12/10 18:07
3F:→ descent: 就算你 chdir 成功, 程式結束後還是只會來原來目錄。 12/10 18:08
→ descent: 在原來目錄
是的 我想改變當下程式執行時的工作目錄 12/10 18:09
※ 編輯: lazy0813 (140.113.134.82 臺灣), 12/10/2020 21:54:08
4F:→ loveme00835: 字串跟陣列有什麼關係? 誤解很深 12/10 22:33
6F:→ oToToT: 樓上上,C字串跟陣列為什麼沒有關係@@? 12/11 01:39
7F:推 b0920075: 你傳一個字元進去要幹嘛,他要的是字串阿 12/11 10:57
8F:→ loveme00835: C-style string 描述的是記憶體內容, 而 char array 12/11 11:05
9F:→ loveme00835: 則是描述型別, 以及語言預設的操作. 如果這兩者可視 12/11 11:07
10F:→ loveme00835: 為等價, 那以這份程式碼來看, 我是不是可以說C-style 12/11 11:12
12F:→ oToToT: array應該有蘊含長度是固定的意思,但是一個int64_t的長度 12/11 14:35
13F:→ oToToT: 就是固定的,而若你要說int64_t array也不行,因為也會有 12/11 14:35
14F:→ oToToT: byte order的問題,但是當然C字串跟字元陣列不同,但是不 12/11 14:36
15F:→ oToToT: 可否認他們有很深的關係吧 12/11 14:36
16F:→ loveme00835: 以記憶體的角度來說, 定義 char array 你是要到了一 12/11 14:54
17F:→ loveme00835: 塊可以放連續數個 char 的空間, 但是這個空間要怎麼 12/11 14:54
18F:→ loveme00835: 用, 該存字元與否? 要不要塞 '\0'? 還是單純把這塊空 12/11 14:54
19F:→ loveme00835: 間當成 buffer? 當作小整數陣列使用? 都跟 C-style s 12/11 14:54
20F:→ loveme00835: tring 所代表的涵義差很多. C-style string 是描述某 12/11 14:54
21F:→ loveme00835: 一塊記憶體空間應該有的內容, 這和你要怎麼達到目的, 12/11 14:54
22F:→ loveme00835: 和要用什麼型別都沒有關係 12/11 14:54
23F:→ oToToT: 推測你想表示c-style string主要的含意是null terminated 12/11 16:23
24F:→ oToToT: ,但是我的理解是c-style string除了null terminated外, 12/11 16:24
25F:→ oToToT: 其呈現手法也會是一個array,內部存放許多字元(這裡的字元 12/11 16:24
26F:→ oToToT: 不限於char,也可以是char16_t等等),所以字串跟陣列並不 12/11 16:25
27F:→ oToToT: 是沒有關係。 12/11 16:25
28F:→ loveme00835: 上面的 int64_t example 哪來的 array? 12/11 16:27
29F:→ oToToT: 這裡我對於array的意涵僅僅只有一個連續包含同樣型別的記 12/11 16:36
30F:→ oToToT: 憶體空間,所以若是你要使用int64_t作為陣列,我認為並沒 12/11 16:36
31F:→ oToToT: 有問題,但是如果稱c style string是int64_t,就是不同的 12/11 16:36
32F:→ oToToT: 思。int64_t可以是一個c style string,但他不會是所有的c 12/11 16:36
33F:→ oToToT: style string 12/11 16:36
34F:→ oToToT: 或者說int64_t可以存放一些c style string,但她不能存放 12/11 16:37
35F:→ oToToT: 所有的c style string 12/11 16:37
36F:→ oToToT: btw我前面的第二則推文似乎有點不知所云,如果有造成誤會 12/11 16:51
37F:→ oToToT: 還請見諒QAQ 12/11 16:51
38F:→ MOONRAKER: 「陣列本身就是指標函數」真是偉大的premise 12/14 14:31
39F:→ MOONRAKER: 不如說整個程式都是指標函數好了 太偉大了 12/14 14:31
求大師解惑
※ 編輯: lazy0813 (140.113.134.82 臺灣), 12/14/2020 23:08:12
40F:推 LPH66: 就, 其實你最開始的問題只不過是沒搞懂函數要什麼而已 12/16 02:41
41F:→ LPH66: chdir 吃一個 C-style 字串, 所以你就用最一般讀字串傳字串 12/16 02:41
42F:→ LPH66: 的方式傳進去就是你要的了 12/16 02:41
43F:→ LPH66: 不需要額外加一些 * 啦 & 的--但至於為什麼不需要 12/16 02:42
44F:→ LPH66: 其中一部份其實是後面大家在討論的東西 12/16 02:42
45F:→ LPH66: 包含到底什麼東西能叫做 C-style 字串, 它跟陣列的關係等 12/16 02:43