为什么我的字符数组为C中的每个索引返回不同的字符
我有一个字符串,我声明为char myStr[]=“5.3 2.4 1.8” 当我直接用printf打印它时,它似乎打印出了我所期望的内容。然而,当我打印每个索引时,我得到的不是myStr[3]='',而是myStr[3]=32。下面是我的代码和输出。我想知道为什么会发生这种情况,以及如何确保将空格解释为空格而不是数字32为什么我的字符数组为C中的每个索引返回不同的字符,c,string,C,String,我有一个字符串,我声明为char myStr[]=“5.3 2.4 1.8” 当我直接用printf打印它时,它似乎打印出了我所期望的内容。然而,当我打印每个索引时,我得到的不是myStr[3]='',而是myStr[3]=32。下面是我的代码和输出。我想知道为什么会发生这种情况,以及如何确保将空格解释为空格而不是数字32 #include <stdio.h> #include <string.h> int words(char myStr[ ]); int main
#include <stdio.h>
#include <string.h>
int words(char myStr[ ]);
int main(){
char myStr[ ] = “5.3 2.4 1.8”;
printf(“myStr is: %s\n", myStr);
words(myStr);
}
int words(char myStr[ ]){
int i, length, count=0, prev=0;
length= strlen(myStr);
printf("The length of myStr is: %d\n", length);
for (i=0; i<length; i++){
printf("The %d letter of myStr is: %d\n", i, myStr[i]);
if (myStr[i] != ' '){
if (prev=0)
count++;
else
prev=1;
}
else
prev=0;
}
return count;
}
谢谢你的建议 原因根据 在
printf
中,使用%c
将获得字符,%d
将获得整数
e、 g:
输出将是:
A
65
a的记忆就像
+-----------+
a | 01000001 |
+-----------+
两个不同的结果仅仅是因为
printf
的输出格式导致每个char
从内存的角度存储为8位宽度的整数,根据
在printf
中,使用%c
将获得字符,%d
将获得整数
e、 g:
输出将是:
A
65
a的记忆就像
+-----------+
a | 01000001 |
+-----------+
两个不同的结果仅仅是因为
printf
的输出格式导致每个char
从内存的角度存储为8位宽度的整数,根据
在printf
中,使用%c
将获得字符,%d
将获得整数
e、 g:
输出将是:
A
65
a的记忆就像
+-----------+
a | 01000001 |
+-----------+
两个不同的结果仅仅是因为
printf
的输出格式导致每个char
从内存的角度存储为8位宽度的整数,根据
在printf
中,使用%c
将获得字符,%d
将获得整数
e、 g:
输出将是:
A
65
a的记忆就像
+-----------+
a | 01000001 |
+-----------+
两个不同的结果仅仅是因为printf的输出格式如果我们查看forprintf()
,我们会发现如果我们想要打印一个整数,我们将使用%d
。您声称要打印一个字符。这是%c
那么,让我们修复对printf()
的调用:
如果我们查看forprintf()
,我们会发现如果我们想要打印一个整数,我们将使用%d
。您声称要打印一个字符。这是%c
那么,让我们修复对printf()
的调用:
如果我们查看forprintf()
,我们会发现如果我们想要打印一个整数,我们将使用%d
。您声称要打印一个字符。这是%c
那么,让我们修复对printf()
的调用:
如果我们查看forprintf()
,我们会发现如果我们想要打印一个整数,我们将使用%d
。您声称要打印一个字符。这是%c
那么,让我们修复对printf()
的调用:
使用%c
将其解释为字符,而不是将打印字符的ASCII值的%d
。同时将if(prev=0)
更改为if(prev==0)
=
是赋值运算符,与比较运算符=
不同。要打印字符,请使用%c”
作为格式说明符。32是空格或空白的ASCII(Unicode)值。就像数字的值在48和57之间一样,空格是32,小数点是46。使用%c
将其解释为字符,而不是将打印字符的ASCII值的%d
。同时将if(prev=0)
更改为if(prev==0)
=
是赋值运算符,与比较运算符=
不同。要打印字符,请使用%c”
作为格式说明符。32是空格或空白的ASCII(Unicode)值。就像数字的值在48和57之间一样,空格是32,小数点是46。使用%c
将其解释为字符,而不是将打印字符的ASCII值的%d
。同时将if(prev=0)
更改为if(prev==0)
=
是赋值运算符,与比较运算符=
不同。要打印字符,请使用%c”
作为格式说明符。32是空格或空白的ASCII(Unicode)值。就像数字的值在48和57之间一样,空格是32,小数点是46。使用%c
将其解释为字符,而不是将打印字符的ASCII值的%d
。同时将if(prev=0)
更改为if(prev==0)
=
是赋值运算符,与比较运算符=
不同。要打印字符,请使用%c”
作为格式说明符。32是空格或空白的ASCII(Unicode)值。就像数字的值在48到57之间一样,空格是32,小数点是46。谢谢@simon_xia。我注意到的一个附带问题是行if(myStr[I]!='')。出于某种原因,即使myStr是字符类型,每次的计算结果都是false。因此,当我运行int words()函数时,我得到零个单词,而我应该得到3(因为myStr“5.3 2.4 1.8”中有两个空格)。您知道如何让我的程序将myStr[3]识别为“”,以便语句if(myStr[I]!='')将计算为true两次,并返回三个字数?再次感谢…@user2808302 themystr[i]!=''代码>工作正常。您可能会感到困惑,因为if(prev=0)
没有按照您的想法执行does@user2808302语句if(prev=0)
应该是if(prev=0)
PS:使用int单词(char*myStr)是一个很好的做法代码>输入