请先看这段代码。
#include <stdio.h>
#include <string.h>
#define N 3
struct body
{
char p[3];
char v[3];
char a[3];
double radius;
double mass;
};
struct body bodies[N];
int main() {
int a, b;
for(a = 0; a < 1; a++) {
for(b =0; b < 1; b++) {
strncpy(&bodies[a].p[b] , "asd", sizeof(3));
strncpy(&bodies[a].v[b] , "bbb", sizeof("bbb"));
strncpy(&bodies[a].a[b] , "ccc", sizeof("ccc"));
printf("\n1. = %s\n",&bodies[a].p[b]);
printf("\n2. = %s\n",&bodies[a].v[b]);
printf("\n3. = %s\n",&bodies[a].a[b]);
}
bodies[a].mass = 0;
bodies[a].radius= 1.0;
}
return 0;
}
结果是
=asdbbbccc
= bbbccc
=抄送
我想要一行中的一个字符! 例如
- = asd
- = bbb
- =抄送
为什么要这样打印? TT 是指针问题吗?????
帮帮我~
最佳答案
你的问题在这里:
struct body
{
char p[3];
char v[3];
char a[3];
double radius;
double mass;
};
C 字符串是 null terminated ,这意味着他们需要一个额外的空字符 '\0'
来表示字符串的结尾,所以如果你想存储一个 3 个字符的字符串,你需要分配 4 个字符来容纳额外的字符空终止符。试试这个:
struct body
{
char p[4];
char v[4];
char a[4];
double radius;
double mass;
};
关于c - 我想要结构数组并且只复制一个字符,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37715419/