以char数据类型C语言存储字符

时间:2010-06-02 13:50:20

标签: c

我可以在char数据类型中存储一些长度的字符串。

但是当它超出容量时,可以存储字符串的替代方法。

我正在使用char数据类型。

void setString(char* inPoints)
{
if (strcmp(mPoints, inPoints)!= ZERO) {

    if (mPoints) {

        free(mPoints);
    }

    mPoints = (char*)malloc((strlen(inPoints) + 1)  * sizeof(char));

    strcpy(mPoints, inPoints);
}
}

4 个答案:

答案 0 :(得分:3)

您可以分配一个更大的新数组并将旧字符串复制到其中(并删除旧字符串以防止内存泄漏),附加更多字符。或者(如果可能的话)切换到C ++字符串类,这使得这个过程更容易。

答案 1 :(得分:2)

realloc()应调整字符串的大小

答案 2 :(得分:0)

使用strncpy而不是strcpy通常更安全,但是在这里你每次都会分配将inPoint存储到mPoint所需的正确内存量,所以我不知道重点是什么。您可以在mPoint中存储的字符串的最大长度受malloc内存量的限制。

添加:您可以按照建议添加realloc,并且您可以添加长度检查以避免在字符串较短时重新分配;所以mPoint能够始终保持小于目前为止所遇到的最长字符串的字符串,或者等于:


// somewhere altogether with mPoints
size_t mPointsCurrenStorage = INITVAL;
// e.g. INITVAL is 256, and you pre-malloc-ate mPoints to 256 chars
// ... in the func
size_t cl = strlen(inPoints);
if ( cl >= mPointsCurrentStorage ) {
  mPoints = realloc(mPoints, cl+1);
  mPointsCurrentStorage = cl+1;
}
strcpy(mPoints, inPoints);

这样存储只会增长......

答案 3 :(得分:0)

  • strcmp with mPoints = NULL不允许。
  • ZERO作为常数?
  • free()接受NULL指针。
  • malloc()不需要在C中进行强制转换。
  • sizeof(char)为1。
  • 始终检查malloc()的返回。

修改版本:

void setString(char* inPoints)
{
    if ((mPoints == NULL) || (strcmp(mPoints, inPoints) != 0)) 
    {
        free(mPoints);

        mPoints = malloc(strlen(inPoints) + 1);

        if (mPoints != NULL)
        {
            strcpy(mPoints, inPoints);
        }
    }
}

你正在使用全局变量mPoints,有更好的解决方案。但是这个和malloc()的错误处理除了空,你总是分配所需的数量,那么你的意思是什么呢?“超过它的容量”?