C 字符串长度出错
C string length is coming wrong
我希望字符串长度为 4,但当我执行 strlen()
时它变为 0。编译期间没有错误。
我无法理解这背后的原因。
这是我的代码片段:
#include <stdio.h>
#include <string.h>
int main()
{
int N = 6;
char s[4];
int i = 0;
while(N!=0) {
int rem = N%2;
N = N/2;
//printf("%d\n", rem);
s[i] = rem;
i++;
}
//s[0] = 1;
printf("size = %zu", strlen(s));
return 0;
}
继续我的评论,4
是一个很小的缓冲区,不要吝啬缓冲区大小(即使一切顺利的话它也可以工作)。迭代时,始终在循环本身中保护数组边界。在将 s
视为字符串之前,您必须在字符串中的最后一个 字符 之后提供空终止字符(例如 '[=14=]'
等同于纯-旧 0
)
注意上面的粗体字符。您将 整数值 指定为一个字符,这是行不通的。使用 + '0'
将整数转换为 ASCII 数字。参见 ASCII Table & Description
总而言之,您将拥有:
#include <stdio.h>
#include <string.h>
#define MAXC 64
int main()
{
int i = 0, N = 6;
char s[MAXC]; /* always use a reasonable sized buffer */
while (i < MAXC - 1 && N != 0) { /* protect array bounds */
int rem = N % 2;
N = N/2;
s[i] = rem + '0'; /* convert to ASCII digit */
i++;
}
s[i] = 0; /* nul-terminate s */
printf ("size = %zu (and i = %d)\n", strlen(s), i);
return 0;
}
示例Use/Output
$ ./bin/mod2str
size = 3 (and i = 3)
如果您还有其他问题,请告诉我。
我希望字符串长度为 4,但当我执行 strlen()
时它变为 0。编译期间没有错误。
我无法理解这背后的原因。
这是我的代码片段:
#include <stdio.h>
#include <string.h>
int main()
{
int N = 6;
char s[4];
int i = 0;
while(N!=0) {
int rem = N%2;
N = N/2;
//printf("%d\n", rem);
s[i] = rem;
i++;
}
//s[0] = 1;
printf("size = %zu", strlen(s));
return 0;
}
继续我的评论,4
是一个很小的缓冲区,不要吝啬缓冲区大小(即使一切顺利的话它也可以工作)。迭代时,始终在循环本身中保护数组边界。在将 s
视为字符串之前,您必须在字符串中的最后一个 字符 之后提供空终止字符(例如 '[=14=]'
等同于纯-旧 0
)
注意上面的粗体字符。您将 整数值 指定为一个字符,这是行不通的。使用 + '0'
将整数转换为 ASCII 数字。参见 ASCII Table & Description
总而言之,您将拥有:
#include <stdio.h>
#include <string.h>
#define MAXC 64
int main()
{
int i = 0, N = 6;
char s[MAXC]; /* always use a reasonable sized buffer */
while (i < MAXC - 1 && N != 0) { /* protect array bounds */
int rem = N % 2;
N = N/2;
s[i] = rem + '0'; /* convert to ASCII digit */
i++;
}
s[i] = 0; /* nul-terminate s */
printf ("size = %zu (and i = %d)\n", strlen(s), i);
return 0;
}
示例Use/Output
$ ./bin/mod2str
size = 3 (and i = 3)
如果您还有其他问题,请告诉我。