Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/c/58.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/arrays/12.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
在C中数组不需要的字符_C_Arrays_Char - Fatal编程技术网

在C中数组不需要的字符

在C中数组不需要的字符,c,arrays,char,C,Arrays,Char,好的,我是C语言的初学者。我认为数组要容纳需要声明的字符,需要声明为: char a[10]; 所以我将有10个元素,从(0到9) 但它不起作用。它给了我不需要的字符。你能告诉我问题是。我的代码: #include<stdio.h> #include<stdlib.h> int main(void) { printf("%s",rand_string()); } int rand_string(void) { srand(time(NULL));

好的,我是C语言的初学者。我认为数组要容纳需要声明的字符,需要声明为:

char a[10];
所以我将有10个元素,从(0到9) 但它不起作用。它给了我不需要的字符。你能告诉我问题是。我的代码:

#include<stdio.h>
#include<stdlib.h>
int main(void)
{
    printf("%s",rand_string());
}
int rand_string(void)
{
    srand(time(NULL)); 
    char a[7];
    int e;
    int d;
    a[0]='l';
    a[1]='o';
    a[2]='n';
    a[3]='g';
    a[4]=' ';
    d=(rand()%6) + 97;
    a[5]=d;
    e=(rand()%10) + 48;
    a[6]=e;
    printf("\n%s\n",a);
    return a;
}
#包括
#包括
内部主(空)
{
printf(“%s”,rand_string());
}
int rand_字符串(void)
{
srand(时间(空));
chara[7];
INTE;
int d;
a[0]=“l”;
a[1]='o';
a[2]='n';
a[3]='g';
a[4]='';
d=(rand()%6)+97;
a[5]=d;
e=(rand()%10)+48;
a[6]=e;
printf(“\n%s\n”,a);
返回a;
}
我得到的结果如下: 长f99 |/

我所期望的是: 长f9

好的,我总共有4个问题: *如何解决不需要的字符的问题,为什么它会提供不需要的字符? *我用极限生成随机数的方法行吗? *如何将前4个字母“长”写在一行中,而不是数组中的每一行? *如何组合两个字符串?

您需要添加字符串。将数组扩展1,并添加
a[7]=0在那里,您将被设置

编辑注:您的程序还有一个大问题,就是返回一个指向局部变量的指针。您可能需要更改
rand_string
以填充
main
提供的缓冲区。下面是两个修改的快速示例:

#include <stdio.h>
#include <stdlib.h>
#include <time.h>

void rand_string(char a[8])
{
    srand(time(NULL)); 
    int e;
    int d;
    a[0]='l';
    a[1]='o';
    a[2]='n';
    a[3]='g';
    a[4]=' ';
    d=(rand()%6) + 97;
    a[5]=d;
    e=(rand()%10) + 48;
    a[6]=e;
    a[7]=0;
    printf("\n%s\n",a);
}

int main(void)
{
    char buffer[8];
    rand_string(buffer);
    printf("%s", buffer);
    return 0;
}
#包括
#包括
#包括
无效随机字符串(字符a[8])
{
srand(时间(空));
INTE;
int d;
a[0]=“l”;
a[1]='o';
a[2]='n';
a[3]='g';
a[4]='';
d=(rand()%6)+97;
a[5]=d;
e=(rand()%10)+48;
a[6]=e;
a[7]=0;
printf(“\n%s\n”,a);
}
内部主(空)
{
字符缓冲区[8];
随机字符串(缓冲区);
printf(“%s”,缓冲区);
返回0;
}
您需要删除您的字符串。将数组扩展1,并添加
a[7]=0在那里,您将被设置

编辑注:您的程序还有一个大问题,就是返回一个指向局部变量的指针。您可能需要更改
rand_string
以填充
main
提供的缓冲区。下面是两个修改的快速示例:

#include <stdio.h>
#include <stdlib.h>
#include <time.h>

void rand_string(char a[8])
{
    srand(time(NULL)); 
    int e;
    int d;
    a[0]='l';
    a[1]='o';
    a[2]='n';
    a[3]='g';
    a[4]=' ';
    d=(rand()%6) + 97;
    a[5]=d;
    e=(rand()%10) + 48;
    a[6]=e;
    a[7]=0;
    printf("\n%s\n",a);
}

int main(void)
{
    char buffer[8];
    rand_string(buffer);
    printf("%s", buffer);
    return 0;
}
#包括
#包括
#包括
无效随机字符串(字符a[8])
{
srand(时间(空));
INTE;
int d;
a[0]=“l”;
a[1]='o';
a[2]='n';
a[3]='g';
a[4]='';
d=(rand()%6)+97;
a[5]=d;
e=(rand()%10)+48;
a[6]=e;
a[7]=0;
printf(“\n%s\n”,a);
}
内部主(空)
{
字符缓冲区[8];
随机字符串(缓冲区);
printf(“%s”,缓冲区);
返回0;
}

卡尔·诺伦已经回答了第一个问题

  • 我用极限生成随机数的方法行吗

    是的,但是定义一个函数会很好,不是吗?调用like
    a[0]=randomBetween(97102)的可读性更强

    编辑:如上面的评论所述:你甚至可以写

    a[0]=randomBetween('a','f')只是可读性多一点;-)

  • 如何将前4个字母“长”写在一行中,而不是数组中的每一行

    没有办法,相反,您可以复制循环中的元素或使用类似的函数。用文字回答你的问题:

    a[0] = 'l'; a[1] = 'o'; a[2] = 'n'; a[3] = 'g';
    
    但这不是你想要的,我猜:-)请参见下面的strcpy示例

  • 如何组合两个字符串

    同样,使用循环或上述函数:

    char *first = "Hello ";
    char *second = "World";
    char combined[12];
    int currentIndex = 0, i = 0;
    
    // copy characters from "first" as long we did not find a \0
    while(first[i] != 0)
        combined[currentIndex++] = first[i++];
    
    i = 0;
    
    // copy characters from "second" as long we did not find a \0
    while(second[i] != 0)
        combined[currentIndex++] = second[i++];
    
    // finally don't forget to null-terminate!
    combined[currentIndex] = 0;
    
    例如,使用strcpy更容易;-)

    我们在这里干什么?第一个strcpy调用简单地将“first”复制到“combined”。但第二个电话似乎很有趣。在这里,我们将“秒”复制到第七个位置(从0开始计数,因此为6)。此位置是第一次函数调用后的
    \0
    -字符。但是我们不希望字符串在这里结束,所以我们用第二个字符串的第一个字符覆盖它。一件好事是strcpy会自动复制结尾处的\0。很简单,不是吗


    • 卡尔·诺伦已经回答了第一个问题

      • 我用极限生成随机数的方法行吗

        是的,但是定义一个函数会很好,不是吗?调用like
        a[0]=randomBetween(97102)的可读性更强

        编辑:如上面的评论所述:你甚至可以写

        a[0]=randomBetween('a','f')只是可读性多一点;-)

      • 如何将前4个字母“长”写在一行中,而不是数组中的每一行

        没有办法,相反,您可以复制循环中的元素或使用类似的函数。用文字回答你的问题:

        a[0] = 'l'; a[1] = 'o'; a[2] = 'n'; a[3] = 'g';
        
        但这不是你想要的,我猜:-)请参见下面的strcpy示例

      • 如何组合两个字符串

        同样,使用循环或上述函数:

        char *first = "Hello ";
        char *second = "World";
        char combined[12];
        int currentIndex = 0, i = 0;
        
        // copy characters from "first" as long we did not find a \0
        while(first[i] != 0)
            combined[currentIndex++] = first[i++];
        
        i = 0;
        
        // copy characters from "second" as long we did not find a \0
        while(second[i] != 0)
            combined[currentIndex++] = second[i++];
        
        // finally don't forget to null-terminate!
        combined[currentIndex] = 0;
        
        例如,使用strcpy更容易;-)

        我们在这里干什么?第一个strcpy调用简单地将“first”复制到“combined”。但第二个电话似乎很有趣。在这里,我们将“秒”复制到第七个位置(从0开始计数,因此为6)。此位置是第一次函数调用后的
        \0
        -字符。但是我们不希望字符串在这里结束,所以我们用第二个字符串的第一个字符覆盖它。一件好事是strcpy会自动复制结尾处的\0。很简单,不是吗


      rand\u string()
      应声明为返回
      char*
      ,这是它内部的工作方式。颠倒
      main()
      rand\u string()
      的顺序,以避免未声明的警告。作为初学者,您应该启用所有警告以捕获这些简单错误。您还可以在C中查找“memset”函数。其他次要位:1)使用
      '0'
      而不是添加
      48
      。是莫尔