#include <stdio.h>
#include <stdlib.h>
#include <string.h>
/*functions
int addHugeNumbers(char *a1,char *a2, char *res);
*/
/* run this program using the console pauser or add your own getch, system("pause") or input loop */
int main() {
/*variables*/
char str[1001];
int i;
/**/
printf("Give the string that contains the numbers that you want to add.\n");
printf("The strings must not contain more than 1000 characters.\n");
scanf(" %s",&str);
for(i=0;i<1001;i++){
printf("element is %s",str[i]);
}
return 0;
}'
答案 0 :(得分:2)
首先,让我告诉您,代码中没有字符串数组,它是char
的数组。
遇到问题,这是双重的。
首先,要打印char
,您需要使用%c
格式说明符,%s
用于字符串(空终止char
阵列)。
其次,在循环条件下。当你说
for(i=0;i<1001;i++)
索引迭代所有数组的元素。但是,如果您的输入小于1000 char
s,则阵列的某些部分仍未初始化。访问未初始化的变量值会调用undefined behavior。
基本上,您应该执行类似
的操作,而不是遍历整个数组。 int len = strlen(str);
for(i=0; i<len; i++)
printf("element is %c",str[i]);
会将您的索引限制为有效值。
那就是说scanf()
语句应该更像是
scanf("%1000s",str); //protect from buffer overflow from reallylonginputstring.....
答案 1 :(得分:1)
使用Traceback (most recent call last):
File "C:/Users/Shera/PycharmProjects/Begin/wordcount.py", line 15, in <module>
start('http://www.cricbuzz.com/live-cricket-scorecard/16445/gl-vs-rcb-qualifier-1-indian-premier-league-2016')
File "C:/Users/Shera/PycharmProjects/Begin/wordcount.py", line 10, in start
words = content.lower()
AttributeError: 'NoneType' object has no attribute 'lower'
打印字符,%c
格式说明符需要以0结尾的字符串。
您也不应该迭代%s
,因为可能所有输入都不是完整的1000个字符。
答案 2 :(得分:0)
现在你的for
循环条件可能导致你迭代char
数组中的未定义元素(字符串)。
您希望将for
循环条件更改为
for (i = 0; i < length; i++)
其中length
被定义为int length = strlen(str);
,它将是字符串的长度,但不包括空终止符。
听起来像是C编程的新手。我建议您阅读一些关于Strings in C和Buffer Overflows的内容,因为他们的主题值得了解并且要小心。
修改:如其他答案中所述,您应该使用%c
打印出每个字符,而不是%s
。