【发布时间】:2021-05-30 00:14:32
【问题描述】:
我正在尝试为这个程序调试一些代码。它应该读取两个字符串并将它们连接成一个新字符串。我有三个组成程序的文件:
main.c:
#include<stdio.h>
#include<string.h>
#include<stdlib.h>
#include "safeStr.h"
int main(void){
char mainStr[MAXSTR]="Initial string";
safeReadString(mainStr,MAXSTR);
int remChars=MAXSTR-strlen(mainStr)-1;
int i;
printf("Got here");
if (remChars>0)
{
char * insStr;
safeReadString(insStr,remChars);
char newStr[strlen(mainStr)+strlen(insStr)+1];
for(i=0;i<=strlen(mainStr);i++)
newStr[i]=mainStr[i];
for(int j=0;j<=strlen(insStr);j++)
newStr[i+j]=insStr[j];
printf("The result of concatenating:\n%s\nwith:\%s\nis:\n%s\n",mainStr,insStr,newStr);
}
else
printf("No room for inserting a string\n");
}
safeStr.c:
#include "safeStr.h"
void safeReadString(char *str,int size)
{
char c;
char* s=str;
int count=0;
printf("Please type a string of at most %d characters.\n",size);
c=getchar();
while((c!='\0') || (count<size))
{
s+=c;
s++;
count++;
c=getchar();
printf("*s: %d s: %s count: %d\n", *s, s, count);
}
*s='\0';
}
和 safeStr.h:
#include<string.h>
#include<stdio.h>
#define MAXSTR 80
void safeReadString(char *str,int size);
我很确定大部分问题都出在函数中,因为我尝试输入一个字符串,但我什么也没得到。
【问题讨论】:
-
s+=c;不会向字符串写入任何内容。应该是*s=c。 -
char * insStr; safeReadString(insStr,remChars);这是未定义的行为,因为insStr是一个未初始化的指针,safeReadString取消了它的引用。将insStr定义为数组或使用malloc动态分配内存。