将字符串转换为char *

时间:2017-01-13 11:08:53

标签: 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);

3 个答案:

答案 0 :(得分:1)

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

注意:C-Strings实际上是由'\​​ 0'字符终止的字符数组。这意味着,C中任何C字符串中的最后一个字符将用于存储标记字符串结尾的'\ 0'字符。要在C中的C-String中存储commit()个字符,您应该定义一个大小为n的字符数组。

  

我们为什么要用'\ 0'来终止它?

(n+1)区分了'\0' terminationchar arrayc-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)

  1. 分配时,您应该分配一个以上的大小。目前,您只分配4个字节。

    char* key = (char*)malloc(keySize+1);
    //instead of
    char* key = (char*)malloc(sizeof(keySize));
    
  2. 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;
}

无论如何有关它的更多信息,我想你想要这个