C:如何为字符串分配精确的字节数?

jun*_*cng 1 c string

这是我的功能.

char * substring(int begin, int end, char * string)
{
int size = end - begin + 1;
char * s = (char *)malloc (sizeof(size));

int i; 

for (i = 0; i < size; i++)
{
    s[i] = string[begin++];
}

return s;
}
Run Code Online (Sandbox Code Playgroud)

所以,让我们说我的字符串只应该是"我".但是当我稍后尝试打印出字符串时,我会得到I + 3个额外的字符,这些字符是无意的.我该如何解决?

Joh*_*ode 6

首先,改变线

char * s = (char *)malloc (sizeof(size));
Run Code Online (Sandbox Code Playgroud)

char * s = malloc( size + 1 ); // + 1 for null terminator
Run Code Online (Sandbox Code Playgroud)

sizeof (size) 为您提供整数中的字节数(2到4到8,具体取决于您的平台),这不一定是您想要的.

接下来,使用该strncpy函数复制第一个size字符string:

strncpy( s, string, size );
Run Code Online (Sandbox Code Playgroud)

确保字符串以空值终止:

s[size] = '\0';
Run Code Online (Sandbox Code Playgroud)