【问题标题】:Length of the string from address of variable(&variable) - Embedded C来自变量(变量)地址的字符串长度 - 嵌入式 C
【发布时间】:2017-09-01 06:22:47
【问题描述】:

如何从 variable(&variable) 的地址找到字符串的长度?下面是代码:

SimpleProfile_GetParameter(SIMPLEPROFILE_CHAR7, &newValue); // Hello123
const char echoPrompt[] = "Print From BLE characters:\r\n";
UART_write(uart, echoPrompt, sizeof(echoPrompt)); // Output : Print From BLE characters: | Size : 29
UART_write(uart, &newValue, sizeof(&newValue)); // Output : Hello | Size : 4

我在Code Composer Studio (CCS) 中使用此代码。我需要在 UART 中打印字符串,我需要指定字符串中的字符数。

我需要打印“Hello123”而不是打印“Hello”

【问题讨论】:

  • sizeof(&newValue) 正在获取指针的大小,而不是数组。
  • 如果你想要一个字符串的长度,使用strlen()。
  • 可以,我能得到数组的大小吗?。我修改了我的问题
  • “字符串”是正确的以空字符结尾的字符串吗?然后使用strlen 得到它的长度。否则,仅使用指针无法获取某些内存的大小。
  • 目前它的数据类型为“unsigned char”

标签: c++ embedded uart texas-instruments code-composer


【解决方案1】:

&newValue 是一个指针,所以sizeof(&newValue) 返回一个指针的大小,而不是它指向的字符串。假设 newValue 是一个以 null 结尾的字符串,请使用 strlen()。

sizeof 在编译时运行,它无法获取动态构造的字符串的大小。

您也应该使用echoPrompt 执行此操作,因为sizeof 包含尾随空字节,您可能不需要编写它。

UART_write(uart, echoPrompt, strlen(echoPrompt));
UART_write(uart, &newValue, strlen(&newValue));

【讨论】:

  • strnlen 会更安全一些,以防字符串未正确终止
  • 假设他的实现有strnlen()。
  • strlen 工作正常。 strnlen 给我的错误是“错误 #10234-D:未解析的符号仍然存在”
  • @ŞivāSankĂr strnlen 是一个 POSIX 函数,它不是标准 C。
  • 在这种情况下,sizeof(echoPrompt) - 1 也可以。
猜你喜欢
  • 1970-01-01
  • 2015-09-14
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2013-07-07
相关资源
最近更新 更多