C 指针上的字符串扫描

C 指针上的字符串扫描,c,arrays,string,pointers,C,Arrays,String,Pointers,我想按用户接收名称。之后,我想在屏幕上打印收到的姓名。例如: -扫描: roy john malw -打印: roy john malw 代码: scanf可能不是正确的函数,请尝试使用strtok: 还要注意,您忘记为要解析的令牌分配内存。在我的示例中,内存分配给整行,strtok返回指向其中子字符串的指针。实际上,scanf也可以: #include <stdio.h> int main () { char s[4][20+1]; int i = 0, j

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

-扫描:

roy
john
malw
-打印:

roy
john
malw
代码:

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


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

实际上,scanf也可以:

#include <stdio.h>

int main () {
    char s[4][20+1];
    int i = 0, j = 0;
    while (i != 4 && scanf("%20s", s[i])) {
        i++;
    }
    while (j != i) {
        printf("%s\n", s[j]);
        j++;
    }
    return 0;
}

但是仍然需要分配内存,并注意scanf应该有一个最大长度。

有什么问题吗?您的问题是什么?上面的代码不能处理字符名[4][32]。。。扫描%31s,名称[i];。。。。printf%s\n,名称[i];
#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;
}
#include <stdio.h>

int main () {
    char s[4][20+1];
    int i = 0, j = 0;
    while (i != 4 && scanf("%20s", s[i])) {
        i++;
    }
    while (j != i) {
        printf("%s\n", s[j]);
        j++;
    }
    return 0;
}