我有2個功能:
- stringCopy()
該參數strToCopy
複製到另一個字符串動態分配的應用的sanitize(見第2個功能)
- _sanitized()
它返回一個動態分配的大寫的版本的參數並刪除非字母字符(如數字值&空格)。動態C字符串(字符*)怪異的行爲
考慮到以下情況,我得到了EXC_BAD_ACCESS
,因爲k
增長太多。
char* _sanitized(const char* str)
{
char* uppercasedStr = malloc(sizeof str);
int k = 0; // Index de parcours de la chaîne originale
int i = k; // Index dans la nouvelle chaîne
char evaluatedChar;
while ((evaluatedChar = str[k]) != '\0')
{
if ('A' <= evaluatedChar && evaluatedChar <= 'Z')
{
uppercasedStr[i] = evaluatedChar;
i++;
}
else if ('a' <= evaluatedChar && evaluatedChar <= 'z')
{
uppercasedStr[i] = evaluatedChar-32;
i++;
}
k++;
}
i++;
uppercasedStr[i] = '\0';
return uppercasedStr;
}
char* stringCopy(char* strToCopy)
{
char* uppercaseStr = _sanitized(strToCopy);
char* copiedStr = malloc(sizeof uppercaseStr);
int k = 0;
while (uppercaseStr[k] != '\0')
{
copiedStr[k] = uppercaseStr[k];
k++;
}
k++;
copiedStr[k] = '\0';
free(uppercaseStr);
return copiedStr;
}
我也注意到,當我複製焦炭從uppercaseStr
到copiedStr
它修改的同時造成溢出uppercaseStr
...
不應'malloc(sizeof str)'是'malloc(strlen(str))'? –
@Neel Basu在這種情況下,使用strlen(str)+ 1 – nos
每個人都在我後面重複:sizeof!= strlen –