基本的c编程字符串数组

时间:2016-05-24 19:43:31

标签: c arrays string printf character

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

3 个答案:

答案 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 CBuffer Overflows的内容,因为他们的主题值得了解并且要小心。

修改:如其他答案中所述,您应该使用%c打印出每个字符,而不是%s