c - 如何检查/测试字符串是静态还是动态并且可以编辑

标签 c

这里我们有 3 个字符串:

char  a1[ ] = "abc"; // static
char  a2[4] = "abc"; // static 
char* a3    = "abc"; // dynamic

测试功能仅作为示例

int test(char* v)
{
  return (*v = '1')
}

让我们在 main 和结果中进行测试

int main()
{

  int n;

  n = test(a1); // OK// 
  // if not '1' use malloc else leave it
  n = test(a2); // OK
  // if not '1' use malloc else leave it
  n = test(a3); // const Error
  // if not '1' use malloc else leave it
}

如何测试/检查a3指针?所以你可以采取类似 malloc(); 的操作;因为它不可编辑,所以我们需要新的指针。

最佳答案

崩溃的原因不是 a3 是一个指针。它指向的内存是编译到程序中的常量,因此无法更改。

没有标准化的方法来测试情况是否如此。提供一个需要运行时开销但许多程序员不会使用的功能是违反 C 哲学的。

因此,如果您需要的话,您有责任跟踪这一点。

您可能会看到的一件事是使用安全检查器,例如 splint ,据我了解,它会扫描您的代码以查找此类潜在问题。

关于c - 如何检查/测试字符串是静态还是动态并且可以编辑,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22647673/

相关文章:

c - 用位运算符解数独的算法

isdigit 可以合法地依赖于 C 语言环境吗

c - rand() 函数在选择 IP 时具有概率

c - 当在随机位置键入字符时,使用文本编辑器打开的文件中的文本如何向右移动?

将一个指针的引用复制到另一个指针 C

c - 如何使用指针处理存储在变量中的地址?

c - __attribute__ 是否适用于声明中的所有变量?

c - 打印纸将邮票填满方形纸,没有任何重叠

c++ - C/C++ 程序使用了多少内存

c - strcmp 有什么问题?