这段c程序(字符串连接)为何崩溃?

作者&投稿:月食 (若有异议请与网页底部的电邮联系)
串口接收字符串c程序~

既然都可以发一个字符了怎么不能发一个字符串呢?
unsigned char code str[] = "hello world!";
unsigned char *pstr = str;
while(*pstr)
{
send_a_char(*pstr);
pstr ++;
}
大概就这思路吧。

char a[90]="hello world?"; // <--- 20 too small

主要问题应该是连接后的字符串超过了数组的定义,造成程序运行结果的不确定。
用char a[100]="heheuuu";这样的定义,可防止合并后长度在99以内的情况出现此类错误。

犯了C之大忌:char a[]="heheuuu";这样声明的a只有8个字符长度,怎能在后面接上"tyyio"?你把char a[]="heheuuu";改成char a[20]="heheuuu";就没事了……
这种错误C是不检查的,必须由程序员自己控制。

亲自试了。没问题。



#include <stdio.h>

void main()
{

char a[]="heheuuu";
char b[]="tyyio";
char *i=a, *j=b;
while(*i) {
i++;
}

i=a; //要修改的地方,指针重新指向a

while(*j) {
*i=*j;
i++;
j++;
}
*i='\0';
printf("%s\n",a);
}


编写一个程序,将两个字符串连接起来,并输出(不要使用strcat函数)。用C...
include<stdio.h> void main(){ char s1[80],s2[40];int i=0,j=0;printf("\\ninput stringl:");scanf("%s",s1);printf("input string2:");scanf("%s",s2);while(s1[i]!='\\0')i++;while(s2[j]!='\\0')s1[i++]=s2[j++];s1[i]='\\0';printf("The new string is:%s...

C语言编程:编一程序,将两个字符串联接起来,不要用Strcat函数。_百度...
思路:输入两个字符串a和b,首先找到第一个字符串a的结束位置,接着把b的所有元素放到a的末尾,最后加上结束标志。参考代码:include<stdio.h>void mystrcat(char a[],char b[]){int i=0,j=0;while(a[i++]!='\\0');\/\/找到a的结束位置 i--;while(b[j]!='\\0'){\/\/把b元素赋值到a...

C语言问题 编写一程序将两个字符串连起来
include <stdio.h>#include <string.h>int main (){ char str1[10],str2[5],*p,i;\/\/这里用str1接收拼接后的字符串,确保str1大小够放!! 注意要留1位保存结束符'\\0' strcpy(str1,"abcd");strcpy(str2,"efgh"); printf("原字符串分别为:%s %s\\n\\n",str1,str2);...

怎样用c语言编程将两字符串连接
1. 用 strcat 函数连接两个字符串。2.以下是相关字符串处理 a=' a';b='b b';c='cccc';m='' % 获取字符串长度 length(a) % 连接两个字符串,每个字符串最右边的空格被裁切 d=strcat(a,c) length(d) % 连接多行字符串,每行长度可不等,自动把非最长字符串最右边补空格 % ...

c语言! 编一程序,将两个字符串连接起来,不要用strcat函数.
思路:字符串连接先需要找到第一字符串的结束位置,接着把第二字符串元素放到第一字符串后面,最后加上结束标志即可。参考代码:拼接123和456 include<stdio.h>void mystrcat(char a[],char b[]){\/\/字符串连接函数 int i=0,j=0;while(a[i++]!='\\0');\/\/找到a的结束位置 i--;while(b[j...

c语言:编写一个字符串连接程序,它的功能是把两个不知道 长度的字符串...
{string s1,s2,s;cin>>s1>>s2;s=s1+s2;cout<<s<<endl;} 本例是在Visual C++ 6.0上运行的其他标准C++软件运行的程序与上述程序略有不同,如:include<iostream> include<string> using namespace std;int main(){string s1,s2,s;cin>>s1>>s2;s=s1+s2;cout<<s<<endl;return0;} ...

用C语言编程:编写一个函数,将两个字符串连接起来
1、新建一个工程和.c文件,输入头文件和主函数。2、定义变量类型。3、调用cpy函数。4、定义一个函数,并定义变量类型。5、用一个For 语句和if语句判断是否为元音。6、最后加一个字符串结束符,并在主函数中输出。7、编译。运行。

用c语言编写程序,将两个字符串连接起来,不要用strcat函数
include <stdio.h>#include <string.h>void strc(char c1[],char c2[]);void main(){char s1[30]="abc";char s2[30]="def";strc(s1,s2); \/\/请在后面补充strc函数的功能,完成两个字符串的连接puts(s1);}void strc(char c1[],char c2[]){ \/\/请填空,完成两个字符串的连接...

C语言程序设计 字符串连接
strcat函数是字符串连接函数,函数返回指针,两个参数都是指针.第一个参数所指向的内存的地址必须能容纳两个字符串连接后的大小.get(ss)是把ss的首地址给了get函数的形参 那么录入的数字就会覆盖原来数组的成员

C语言中字符串连接怎么解决??
include<string.h> char a[10]="123";char b[10]="abc";char c[20];strcpy(c,a); \/\/把串a复制到有足够空间的c中 strcat(c,b); \/\/把b连接到c的串尾

管城回族区13385267013: c语言字符串编程,为什么这个程序运行会崩溃? -
凌新鑫贝: char word[]=""是声明了一个长度为1的char类型数组,而在调用scanf函数的时候自然会溢出崩溃.我写了一个程序应该能有#include int main() { char ch; //每次读取字符的buffer int count = 0; //单词长度 while(1) { scanf("%c", &ch); //读取字符...

管城回族区13385267013: C语言 这个程序怎么运行就崩溃? -
凌新鑫贝: 错误:1.子程序第一个循环体中,变量未赋初值. 2. 多了一对花括号{}改成如下程序,即可运行.#include<stdio.h>void strcopy(char s1[],char s2[]){ int i,j=0; for(i=0;s1[i]!='\0';i++) while(s2[j]!='\0') s1[i++]=s2[j++]; s1[i]='\0';}void main(){ char str1[80],str...

管城回族区13385267013: C语言什么情况下字符串连接会失败
凌新鑫贝: strcat 的两个参数都必须是字符串,不可以是字符. (还要注意第一个参数,即目标字符串,要有足够的空间储存连接后的字符串.) 你定义的 buff 是字符,就不能用 strcat 了. 假如要单个赋值字符的话,可以参考以下方法. char a[80] = "apple"; char b[2]; b[0] = 's'; b[1] = '\0'; strcat(a, b);

管城回族区13385267013: 这段读取文件字符串的c语言运行就会停止工作 -
凌新鑫贝: password没有分配内存.声明改成char password[7];或者 char *password=(char *)malloc(7*sizeof(char));

管城回族区13385267013: 为什么c语言编程时会崩溃
凌新鑫贝: 那是你写的代码有问题,虽然能编译连接,但是运行时有错.举个很简单的例子如: int *p; *p = 5; 这两句代码没有语法错误,能编译连接通过,但是程序会崩溃.如果还有那种问题的话,仔细检查一下你的代码,不行就贴出来看看

管城回族区13385267013: C语言数据结构,这段代码运行为什么会崩溃呢 -
凌新鑫贝: #include <stdio.h>#include <stdlib.h>#include <string.h> typedef struct LNode { int num; int nod; struct LNode *next; }LNode, *LinkList; LinkList InitList(int n) { int i; LinkList h,m,t; t=(LinkList)malloc(sizeof(LNode)); t->nod=0; m=t; for(i=1;i<(n+1);i++) { ...

管城回族区13385267013: c语言字符串连接出错,str1=str2&str3; -
凌新鑫贝: 不能写成str1=strcat(str2,str3); 使用了strcat(str2,str3); 语句之后,str2就变成了原来的str2+str3 因此,如果非要写成str1的话,要再加上一句: strcpy(str1,str2); 补充;如果按照三楼那样定义的话,可以. 二楼正解. 但是如果定义成char str1[...

管城回族区13385267013: C语言指针问题 用指针实现两个字符串的连接 我这个程序一运行就死机,请高手帮忙看看问题在哪? -
凌新鑫贝: 出错的地方:for(i=0;s2[i]!='\0';i++) {p[j+1]=&s2[i]; j=j+1;} 原因:在上一个循环中i已经指向了下一个填充的地方,而j+1则让这个地方跳过去了,该地址没有被更新,于是,最终程序访问了非法的地址.改正:p[j]=&s2[i];

管城回族区13385267013: C程序中的一个函数编译链接时通过了,但程序一启动就崩溃了什么原因? -
凌新鑫贝: 所以可以编译通过,但在逻辑上却有错误,导致错误这种情况是因为程序源码本身没有语法错误之类的;%d&quot.举个例子,如果用scanf(",编译时并不会报错;,a);%d",&a);时写成scanf(&quot,比如内存读写错,但运行时却会因为读了a的值指向的没有权限读写的内存而产生错误. 很有可能是函数写得有问题

管城回族区13385267013: 这个C程序为什么运行崩溃? -
凌新鑫贝: 等效于 typedef struct node*windows; 所以 windows a[10] 就是 struct node* a[10]; a的每个元素都是指针. 而你又没有分配内存,自然直接输入时会导致程序崩溃.

本站内容来自于网友发表,不代表本站立场,仅表示其个人看法,不对其真实性、正确性、有效性作任何的担保
相关事宜请发邮件给我们
© 星空见康网