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