当我尝试转换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' termination
是 char array
的不同之处来自c-string
在C 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/