我试着了解一些关于char的事情。
我写了这段代码,但它给出了错误。为什么我不能扫描" Hello world",并且只得到" Hello"用这个代码? (我以为st1 [0] = Hello st1 [1] = world)
我该怎么办?
char st1[100];
gets(st1);
printf("%s",st1[0]);
答案 0 :(得分:0)
有多种方式......最简单的方法是执行以下操作:
char *str1[] = {"Hello", "World"};
现在这些单词存储在splited数组中。访问“你好”#39;使用str1[0]
。
另一种方法是通过char打印char,直到你打印出'Hello'
。示例(其中str1是代码中的那个):
for(int x = 0; x < strlen("Hello") && x < strlen(str1); x++)
printf("%c", str1[x]);
你的错误:
C中的字符串只是一个字符数组,所以String&#39; Hello World&#39;将是&#39; H&#39;第二个将是&#39; e&#39;等等..
答案 1 :(得分:0)
st1[0]
只是短语中的第一个字符。您可以迭代直到匹配' '
(空格)或到达字符串的末尾:
char st1[100];
gets(st1);
for (int i=0; i<100 && st1[i]!=' '; ++i) {
printf("%c",st1[i]);
}
答案 2 :(得分:0)
使用puts(st1)
打印字符串
通过将st1[0]
放在printf中,您告诉程序只打印字符串的第一个元素。
#include <stdio.h>
#include <stdlib.h>
int main()
{
char x[100];
gets(x);
puts(x);
return 0;
}
答案 3 :(得分:0)
st1[0]
是一个字符,而不是C字符串。
#include <stdio.h>
#include <string.h>
int main(void){
char st1[100];
if(fgets(st1, sizeof st1, stdin)){
char *p = strchr(st1, ' ');
if(p != NULL)
*p = 0;
printf("%s\n", &st1[0]);
}
return 0;
}
答案 4 :(得分:0)
您发布的内容很可能不是您使用的代码(请参阅下面的第2项)。
char st1[100];
gets(st1);
printf("%s",st1); //this is where you need a correction
...作为格式化字符串中的“%s”序列使printf()期望一个地址,并且数组(st1)的名称衰减为C中的指针(地址)。您的错误在于使用索引(st1 []) ,这并不意味着'地址',而是意味着'从表中只拿一个字符'。显然,第一个字符(如果你输入'Hello','H')与整个数组所在的内存地址完全无关。它也不太可能偶然地指向你的报告中的一些“Hello”字符串(因此我认为代码并不完全是你运行的)。