我可以在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);
}
}
答案 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)
修改版本:
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()的错误处理除了空,你总是分配所需的数量,那么你的意思是什么呢?“超过它的容量”?