c - 指针上的字符串 scanf

标签 c arrays string pointers

我想接收用户的姓名。之后,我想在屏幕上打印收到的姓名。例如:

--扫描:

roy
john
malw

--打印:

roy
john
malw

代码:

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

int main ()
{
    int i;
    char *aer[4];
    char *(*pter)[4] = &aer;

    for(i=0;i<4;i++)
        scanf(" %s",&(*pter)[i]); //read strings

    for(i=0;i<4;i++)
        printf("String %d : %s\n",i+1,(*pter)[i]); //write strings

    system ("pause");
    return 0;
}

最佳答案

scanf 可能不是正确的函数,请尝试使用 strtok:

#include <string.h>
#include <stdio.h>

#define MAX_LINE_LENGTH 80
#define MAX_TOKENS_PER_LINE 4

int main () {
    int i;
    char *aer[MAX_TOKENS_PER_LINE];
    char s[MAX_LINE_LENGTH];

    do {
        if (!fgets(s, MAX_LINE_LENGTH, stdin)) return -1;

        i = 0;
        while (
            i != MAX_TOKENS_PER_LINE
         && (aer[i] = strtok(i ? 0 : s, " \n"))
        ) i++;

        i = 0;
        while (
            i != sizeof(aer) / sizeof(aer[0])
         && aer[i]
        ) {
            fprintf(stdout, "%s\n", aer[i]);
            i++;
        }
    }
    while (aer[0]);

    return 0;
}

另请注意,您忘记为要解析的标记分配内存。在我的示例中,内存分配给整行,strtok 返回指向其中子字符串的指针。

关于c - 指针上的字符串 scanf,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29833191/

相关文章:

c - ( float )C 中的类型转换

c - 如何在 PlantUML 事件图中使用 C 中的 "continue"语句表示循环

arrays - 如何从 go map 对象访问深度嵌入的 json 对象?

python - 如何解决 Python 不打印所有字符串的问题

c - Perl:阻塞信号没有延迟 -> 提供了测试代码

c - 程序在 15 秒后进入无限循环

.net - 如何正确地将 VB-Script 数组编码到用 C# 编写的 COM 组件或从中编码

arrays - 执行至多K次交换可以获得的最小连续和

c# - 子串难度C#

javascript - 连接 JSON 中的字符串