c - 如何查看存储的字符串

标签 c

#include <stdio.h>
#include <conio.h>
#include <stdlib.h>

void clearscreen()
{
    system("cls");
}

int main()
{
    int b1,b,c;
    char data[20]; 
    int number,a;

    printf("How many data do you want to store  ");
    scanf("%d",&number);

    for(a=1;a<=number;a++)
    {
        printf("Input your data No_%d:       ",a);
        scanf("%s",&data[a]);
    }     
    return 0;
}

我的问题是:存储数据后,如何查看? 例如我存储2个数据。 nxt 是我想查看这 2 个数据。 有人可以给我一个示例代码吗?

最佳答案

您当前的代码可以编译,但它从根本上是错误的:char是一种可以存储单个字符而不是整个字符串的类型。因此,&data[a] 将指向先前使用的字符串的子字符串,每个后续的子字符串都会覆盖先前输入的部分。

不幸的是,C 中的字符串操作远比这复杂 - 您需要一个 2D 数组或指针数组才能正确完成任务:

char *data[20];
...
for(a=1;a<=number;a++)
{
    char buf[101];
    printf("Input your data No_%d:       ",a);
    scanf("%100s", buf); // 100-char limit, no ampersand!
    data[a] = malloc(sizeof(char)*(strlen(buf)+1));
    strcpy(data[a], buf);
}

现在您可以打印了:

for(a=1;a<=number;a++)
{
    printf("Your data No_%d: is %s\n",a, data[a]);
}

最后,您必须释放已分配的数据:

for(a=1;a<=number;a++)
{
    free(data[a]);
}

关于c - 如何查看存储的字符串,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12881933/

相关文章:

c++ - 将处理器结果保存到 MPI 中的一个数组

c - 使用多边形作为可点击区域,而不是矩形

c - 当我的文本文件包含超过限制的字符时接收信号 SIGTRAP

更改字符指针中的值会导致空白或问号

c - 在c代码的非阻塞设计中选择

c - typedefs 与 Doxygen 的同行文档

c - Visual Studio 2017 是否完全支持 C99?

c - 为什么即使我没有尝试修改字符串,C 中的字符串也会被修改?

c - 在另一个函数中分配的动态数组

c - x--c中的操作,为什么b的值在减少并等于 '2',但c的值没有变化