作者pilipalabon (...)
看板C_and_CPP
标题[问题] 请问语法问题
时间Fri Mar 12 11:19:35 2021
我使用Keil C编译器, 请教一个语法问题
char *name = "stream_server";
这样子会让string写到不明位置造成危险吗?
但我宣告为 char name[];
compiler却又告诉我 incomplete type is not allowed
我一定要宣告为 char name[10];
才能够成功 0 Error.
但由於我的所带入的字串并非都是等长, 不知道该怎样做才好?
thanks!
--
※ 发信站: 批踢踢实业坊(ptt.cc), 来自: 59.125.153.170 (台湾)
※ 文章网址: https://webptt.com/cn.aspx?n=bbs/C_and_CPP/M.1615519177.A.5FF.html
1F:推 Schottky: 问题出在你没贴出来的地方 03/12 11:27
2F:→ Schottky: 我隐隐觉得你有犯了置底第四诫就是了 03/12 11:29
3F:→ descent: char *, const char*, char str[10] 这些差异你清楚吗? 03/12 11:35
4F:→ descent: 你是担心 name 指向不合法位置吗? 03/12 11:36
是的, 担心指向不合法位置.
我将code贴在这边:
http://pastie.org/p/3RlwdiXlanGxt0CMfcQMEU
※ 编辑: pilipalabon (59.125.153.170 台湾), 03/12/2021 11:49:39
5F:推 Dinowchang: 用 char *name=(char []){“stream_server”}; 03/12 12:06
6F:推 d630200x: 字串长度未定的情况下,我会宣告一个足够的大的阵列,比 03/12 12:24
7F:→ d630200x: 如char strbuff[255]之类的,方便对字串做操作 03/12 12:24
8F:→ d630200x: 因为网页我打不开,所以不确定实际你是怎麽写就是了 03/12 12:25
9F:推 LPH66: 你这个是结构成员, 当然必须要写一个长度固定下来 03/12 13:14
10F:→ LPH66: char name[] = "myserver"; 这种只有区域变数才能用 03/12 13:15
11F:→ LPH66: 结构成员的问题在於它不知道有谁会用, 无法提前应对 03/12 13:16
12F:→ LPH66: 不像区域变数只有当下指定的值在用, 所以可以让编译器自动 03/12 13:17
13F:→ LPH66: 求出用的这里有多长去留空间 03/12 13:17
14F:→ LPH66: 结构成员的用法多半就像我楼上说的就给一个最大长度就好 03/12 13:17
15F:→ LPH66: 或是像下篇文章说的使用 const char * 03/12 13:18
16F:→ pilipalabon: 了解....学习了! 谢谢LPH66的解释! 03/12 13:28
17F:推 Gway: 为啥不是 知道strlen後 再malloc len+1(for '/0') ? 03/18 01:34
18F:→ Lipraxde: 嵌入式系统不见得有 malloc 可以用 03/18 07:17