当我尝试将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);
答案 0 :(得分:1)
C编程语言中没有字符串数据类型。 C中的字符串表示为字符数组。
注意:C-Strings实际上是由'\ 0'字符终止的字符数组。这意味着,C中任何C字符串中的最后一个字符将用于存储标记字符串结尾的'\ 0'字符。要在C中的C-String中存储commit()
个字符,您应该定义一个大小为n
的字符数组。
我们为什么要用'\ 0'来终止它?
(n+1)
区分了'\0' termination
与char array
中c-string
的区别。大多数字符串操作函数(如C programming language
)依赖于'\ 0'字符来知道字符串何时完成(并且其作业已完成!),并且不能使用简单的char-array(例如,它们)将继续超越数组的边界,并继续直到它在内存中找到'\ 0'字符 - 经常破坏内存。
因此,如果你想使用像strcpy
这样的#include <string.h>
函数,因为它们依赖'\ 0'字符标记结尾,那么存储'\ 0'字符(在结尾处)是必要的字符数组。
'\ 0'被定义为空字符 - 这是一个所有位都设置为零的字符(因此值为0)。这与指针无关。详细了解here。
在您的程序中,您希望两个字符数组strcpy()
和key (dynamically allocated)
保存另一个大小为s
的字符数组key2
的副本。然后,两个字符数组应至少为keysize
(+1以保持'\ 0'字符)大小。
变化:
keysize + 1
要:
char* key = (char*)malloc(sizeof(keySize));
和
变化:
char* key = malloc(keySize+1); // Don't Type-Cast malloc
要
char s[keySize-1];
答案 1 :(得分:0)
分配时,您应该分配一个以上的大小。目前,您只分配4个字节。
char* key = (char*)malloc(keySize+1);
//instead of
char* key = (char*)malloc(sizeof(keySize));
s
的大小应为keySize+1
char s[keySize+1];
// instead of
char s[keySize-1];
答案 2 :(得分:0)
这个怎么样? 关于s的维度有一些错误,我建议你使用strncpy
#include <string.h>
int main(){
//bla bla ...
int keySize = getKeySize(key2);
char* key = malloc(keySize+1);;
int i2;
for(i2=0; i2<keySize; i2++){
s[i2] = getCharacter(key2, i2);
}
char s[keySize+1];
strncpy(s, key, sizeof s - 1);
s[keySize] = '\0';
r
return 0;
}
无论如何有关它的更多信息,我想你想要这个