我的串联操作有什么问题?
What is Wrong with My Concatenation Operation?
我试图实现 strcat()
,所以我想出了这段代码。但是,我不知道这有什么问题?它给我分段错误。
我在想这可能是内存分配混乱?是吗?如何在不使用 malloc()
的情况下修复它?
#include <stdio.h>
char *strcat(char *s,char *d){
while(*s++ != '[=10=]') ;
while(*s++ = *d++) ;
*s = '[=10=]';
return s;
}
int main(){
char s[20]= "source";
char d[20]= "dest";
printf("%s\n",strcat(s,d));
return 0;
}
我必须在 s
之前连接 d
。
- 字符串在只读内存中
- 字符串
s
不够长
修复:
...
#define S_STR "source"
char *d= "dest";
char *s= S_STR;
s = malloc(strlen(s) + strlen(d) + 1);
strcpy(s, S_STR);
printf("%s\n",strcat(s,d));
free(s);
return 0;
}
s,d是字符串常量!你不应该做这样的事情。
有一个像 char s[100] 这样的大数组,将源复制到它,然后使用你的连接。请记住,s 应该有空间容纳 d 的内容!
你声明的字符串s和d是常量字符串字面量,你不能修改它们。
您应该声明两个 char 数组,并确保要复制到的数组足够大以容纳另一个数组。
#include <stdio.h>
char *strcat(char *s,char *d)
{
//Get length of s string
size_t len = strlen(s);
//declare new pointer and assign it the value of s
char *ptr = s;
//move the pointer to the end of the string
ptr += len;
//copy contentes of d string to s string
while( *d != '[=10=]' )
{
*ptr++ = *d++;
}
*ptr = '[=10=]';
//return s
return s;
}
int main()
{
//make sure s array length is big enough to accomodate d string
char s[50] = "source";
char d[] = "dest";
printf("%s\n",strcat(s,d));
return 0;
}
我修好了
#include <stdio.h>
#define SIZE 20
char *strocat(char *s,char *d){
char *temp = s;
while(*s++ != '[=10=]');
*--s;
while(*s++ = *d++);
*s = '[=10=]';
return temp;
}
int main(){
char s[SIZE] = "source";
char d[SIZE] = "dest";
printf("%s\n",strocat(s,d));
return 0;
}
我试图实现 strcat()
,所以我想出了这段代码。但是,我不知道这有什么问题?它给我分段错误。
我在想这可能是内存分配混乱?是吗?如何在不使用 malloc()
的情况下修复它?
#include <stdio.h>
char *strcat(char *s,char *d){
while(*s++ != '[=10=]') ;
while(*s++ = *d++) ;
*s = '[=10=]';
return s;
}
int main(){
char s[20]= "source";
char d[20]= "dest";
printf("%s\n",strcat(s,d));
return 0;
}
我必须在 s
之前连接 d
。
- 字符串在只读内存中
- 字符串
s
不够长
修复:
...
#define S_STR "source"
char *d= "dest";
char *s= S_STR;
s = malloc(strlen(s) + strlen(d) + 1);
strcpy(s, S_STR);
printf("%s\n",strcat(s,d));
free(s);
return 0;
}
s,d是字符串常量!你不应该做这样的事情。 有一个像 char s[100] 这样的大数组,将源复制到它,然后使用你的连接。请记住,s 应该有空间容纳 d 的内容!
你声明的字符串s和d是常量字符串字面量,你不能修改它们。 您应该声明两个 char 数组,并确保要复制到的数组足够大以容纳另一个数组。
#include <stdio.h>
char *strcat(char *s,char *d)
{
//Get length of s string
size_t len = strlen(s);
//declare new pointer and assign it the value of s
char *ptr = s;
//move the pointer to the end of the string
ptr += len;
//copy contentes of d string to s string
while( *d != '[=10=]' )
{
*ptr++ = *d++;
}
*ptr = '[=10=]';
//return s
return s;
}
int main()
{
//make sure s array length is big enough to accomodate d string
char s[50] = "source";
char d[] = "dest";
printf("%s\n",strcat(s,d));
return 0;
}
我修好了
#include <stdio.h>
#define SIZE 20
char *strocat(char *s,char *d){
char *temp = s;
while(*s++ != '[=10=]');
*--s;
while(*s++ = *d++);
*s = '[=10=]';
return temp;
}
int main(){
char s[SIZE] = "source";
char d[SIZE] = "dest";
printf("%s\n",strocat(s,d));
return 0;
}