在C中数组不需要的字符
好的,我是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));
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
。是莫尔