c - 我想要结构数组并且只复制一个字符

标签 c pointers arraylist

请先看这段代码。

#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;
}

结果是

  1. =asdbbbccc

  2. = bbbccc

  3. =抄送

我想要一行中的一个字符! 例如

  1. = asd
  2. = bbb
  3. =抄送

为什么要这样打印? 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/

相关文章:

C-解析文本和调用函数

java - Netstat 用于单个连接?

java - 如何从数组中查找项目并将其添加到列表中 (Java)

java - 如何将arraylist转换为双引号中所有项目的字符串数组

c - 它打印 printf 语句两次

c - 为什么我的 MPI 程序没有按预期打印

在matlab中调用C函数的变量地址

c++:push_back() 和 back() 与指针的行为

c++如何将指针分配给二叉树中的父节点

C# 打印包含多个值的 ArrayList