将字符串转换为 char*

标签 c arrays string arraylist malloc

当我尝试转换char[]时至char* char* 添加了不需要的字符变量

 int keySize = getKeySize(key2);
 char* key = (char*)malloc(sizeof(keySize));
 int i;
 char s[keySize-1];
 int i2;

 for(i2=0; i2<keySize; i2++)
 {
     s[i2] = getCharacter(key2, i2);
 }

 strncpy(key, s, keySize);

最佳答案

C 编程语言中没有字符串数据类型。 C 中的字符串表示为字符数组。

注意:C 字符串实际上是以“\0”字符结尾的字符数组。这意味着,C 中任何 C 字符串中的最后一个字符将用于存储标记字符串结尾的“\0”字符。到店n C 中的 C-String 中的字符,您应该定义大小为 (n+1) 的字符数组.

Why should we terminated it by '\0'?

'\0' terminationchar array 的不同之处来自c-stringC programming language 。大多数字符串操作函数(如 strcpy )依赖 '\0' 字符来知道字符串何时完成(并且它的工作完成!),并且不适用于简单的字符数组(例如,它们将继续超出数组的边界,并继续直到在内存中的某个位置找到“\0”字符 - 通常会破坏内存)。

因此,如果要使用 #include <string.h> 的函数,则需要存储“\0”字符(在末尾)。喜欢 strcpy()因为它们依赖 '\0' 字符来标记字符数组的结尾。

'\0' 被定义为空字符 - 即所有位都设置为零的字符(因此值为 0)。这与指针无关。了解更多相关信息here .

在您的程序中,您需要两个字符数组 key (dynamically allocated)s保存另一个字符数组 key2 的副本尺寸keysize 。那么,两个字符数组都应至少为 keysize + 1 (+1 表示“\0”字符)大小。

更改:

char* key = (char*)malloc(sizeof(keySize));

致:

char* key = malloc(keySize+1); // Don't Type-Cast malloc

还有

更改:

char s[keySize-1];

char s[keySize+1];

关于将字符串转换为 char*,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41633236/

相关文章:

c - 在哪些情况下 i++ 和++i 可以引用相同的值?

python - 将Python编译成机器码可行吗?

c - 循环这个问题的更好方法是什么?

Java StringBuffer、ASCII 字符和串行通信

java - 在java中如何将带有整数的字符串转换为带有整数的数组?

c - 返回参数不起作用 - 给我一个奇怪的错误

C freopen 描述符 - 手动关闭/保持打开状态

创建具有 block 大小的共享 vector ?

javascript - jquery、ajax、从博客 json feed 创建标签数组

javascript - 动态替换数组中的值