指针算术帮助 [英] pointer arithmetic help

查看:53
本文介绍了指针算术帮助的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

您好,


我需要将缓冲区中存储的前5个字符一次复制到另一个

缓冲区中。我尝试了它,但我得到了

分段错误:

#include< stdio.h>


#define LENGTH 5

char * kernel_buf;

char * user_buf =" Priya很困惑\ n" ;;


int main( ){

int i;

char ch;

printf(" user_buf:%s",user_buf);

for(i = 0; i< LENGTH; i ++){

* kernel_buf = *(user_buf ++);

printf("%c\\\
" ;,* kernel_buf);

}

返回1;

}


消息我得到的是:

user_buf:Priya很困惑

分段错误


如果有人能帮我搞清楚我错在哪里非常好

有用。


谢谢,

Priya

解决方案

priyanka写道:


你好,


我需要复制前5个字符stor在一个缓冲区中加入另一个

缓冲区,一次缓冲一个字符。我尝试了它,但我得到了

分段错误:



发布三次并不是一个好主意。 Usenet不是同步的,你需要等待发布才能传播。


#include< stdio.h>


#define LENGTH 5

char * kernel_buf;

char * user_buf =" Priya is confused\\\
" ;;



制作第二个const char *,你不能改变它。


int main(){

int i;

char ch;

printf(" user_buf:%s",user_buf);

for(i = 0; i< LENGTH; i ++){

* kernel_buf = *(user_buf ++);



你还没有为kernel_buf分配任何内存。请参阅malloc()。


一旦修复,您可能需要类似


kernel_buf [i] = user_buf [i ];


-

Ian Collins。




priyanka写道:


你好,


我需要将存储在缓冲区中的前5个字符复制到另一个

一次缓冲一个字符。我尝试了它,但我得到了

分段错误:


#include< stdio.h>


#define LENGTH 5

char * kernel_buf;



请注意,这是一个char指针,默认情况下可能设置为NULL。


char * user_buf =" Priya is confused\\\
" ;;



这实际上你给了一个值,所以user_buf保存地址

字符串Priya is confused\ n"。


int main(){

int i;

char ch;

printf(" user_buf:%s",user_buf);

for(i = 0; i< LENGTH; i ++){

* kernel_buf = *(user_buf ++);



使用指向char而不是char的指针的好处是什么?

这个场景?你正在使事情变得过于复杂,并且最终试图将值存储在无效的地址上。
。 (顺便说一下,这个


有几种解决方案。您可以将kernel_buf声明为简单地为
char,并删除所有星号。你可以malloc一个字符。或者

你可以设置kernel_buf指向你上面的char ch。


ie


char kernel_buf ;

for(i = 0; i< LENGTH; i ++){

kernel_buf = * user_buf ++;

printf("%c \ n",kernel_buf);

}





kernel_buf = malloc(sizeof(char) );

for(i = 0; i< LENGTH; i ++){

* kernel_buf = * user_buf ++;

printf(" %c \ n",* kernel_buf);

}





kernel_buf =& ch ;

for(i = 0; i< LENGTH; i ++){

* kernel_buf = * user_buf ++;

printf("% c\ n,* kernel_buf);

}


printf("%c\ n",* kernel_buf);

}

返回1;



一般来说,成功后返回0。


}


我收到的消息是:

user_buf:Priya感到困惑

分段错误


如果有人能帮助我的话在我错的地方,它会非常有用。


谢谢,

Priya


感谢您的帮助。我根据你们的说法试了一下:

#include< stdio.h>


#define LENGTH 5


char * kernel_buf;

char * user_buf =" Priya很困惑\ n" ;;

kernel_buf = malloc(sizeof(char));


int main(){

int i;

char ch;

printf(" user_buf:% s",user_buf);

for(i = 0; i< LENGTH; i ++){

* kernel_buf = *(user_buf ++);

printf("%c\ n",* kernel_buf);

}

返回1;

}


现在我得到错误告诉

kernel_buf存在冲突类型。


谢谢,

Priya


10月16日下午6:18,Chris Johnson < effig ... @ gmail.comwrote:


priyanka写道:


你好,


我需要将缓冲区中存储的前5个字符一次复制到另一个

缓冲区中。我尝试了它,但我得到了

分段错误:


#include< stdio.h>


#define LENGTH 5

char * kernel_buf;注意这是一个char指针,默认情况下可能设置为NULL。


char * user_buf =" Priya is confused\\\
" ;;这实际上是给了一个值,所以user_buf保存了地址



字符串Priya is confused\\\


int main(){

int i;

char ch;

printf(" user_buf:%s",user_buf);

for(i = 0; i< LENGTH; i ++){

* kernel_buf = *(user_buf ++);在$ b中使用指向char而不是char的指针有什么好处$ b



这个场景?你正在使事情变得过于复杂,并且最终试图将值存储在无效的地址上。
。 (顺便说一下,这个


有几种解决方案。您可以将kernel_buf声明为简单地为
char,并删除所有星号。你可以malloc一个字符。或者

你可以设置kernel_buf指向你上面的char ch。


ie


char kernel_buf ;

for(i = 0; i< LENGTH; i ++){

kernel_buf = * user_buf ++;

printf("%c \ n",kernel_buf);


}或


kernel_buf = malloc(sizeof(char));

for(i = 0; i< LENGTH; i ++){

* kernel_buf = * user_buf ++;

printf("%c\ n,* kernel_buf);


}或


kernel_buf =& ch;

for(i = 0; i < LENGTH; i ++){

* kernel_buf = * user_buf ++;

printf("%c\ n",* kernel_buf);


}


printf("%c\ n",* kernel_buf);

}

返回1;通常,成功时返回0。


}


我收到的消息是:

user_buf:Priya感到困惑

分段错误


如果有人能帮我弄清楚我在哪里错了,这将是非常有用的。


谢谢,

Priya


Hi there,

I need to copy the first 5 characters stored in a buffer into another
buffer one character at a time. I tried doiing it as under but I got
segmentation errors:
#include<stdio.h>

#define LENGTH 5
char * kernel_buf;
char * user_buf = "Priya is confused\n";

int main(){
int i;
char ch;
printf("user_buf:%s",user_buf);
for(i = 0; i < LENGTH; i++){
*kernel_buf = *(user_buf++);
printf("%c\n",*kernel_buf);
}
return 1;
}

The message I get is:
user_buf:Priya is confused
Segmentation fault

If anyone could help me figure out where I am wrong it would be very
helpful.

Thank you,
Priya

解决方案

priyanka wrote:

Hi there,

I need to copy the first 5 characters stored in a buffer into another
buffer one character at a time. I tried doiing it as under but I got
segmentation errors:

Posting three times isn''t a good idea. Usenet isn''t synchronous, you
have to wait for posting to propagate.

#include<stdio.h>

#define LENGTH 5
char * kernel_buf;
char * user_buf = "Priya is confused\n";

Make the second const char*, you can''t change it.

int main(){
int i;
char ch;
printf("user_buf:%s",user_buf);
for(i = 0; i < LENGTH; i++){
*kernel_buf = *(user_buf++);

You haven''t allocated any memory for kernel_buf. See malloc().

Once that is fixed, you''ll probably want something like

kernel_buf[i] = user_buf[i];

--
Ian Collins.



priyanka wrote:

Hi there,

I need to copy the first 5 characters stored in a buffer into another
buffer one character at a time. I tried doiing it as under but I got
segmentation errors:

#include<stdio.h>

#define LENGTH 5
char * kernel_buf;

Note that this is a char pointer, and by default is likely set to NULL.

char * user_buf = "Priya is confused\n";

This you''ve actually given a value, so the user_buf holds the address
of the string "Priya is confused\n".

int main(){
int i;
char ch;
printf("user_buf:%s",user_buf);
for(i = 0; i < LENGTH; i++){
*kernel_buf = *(user_buf++);

What is the benefit to using a pointer to a char instead of a char, in
this scenario? You are making things overly complex, and have ended up
attempting to store a value at an invalid address. (Incidentally, this
is where your segfault will be.)

There are several solutions. You could declare kernel_buf to simply be
a char, and get rid of all your asterisks. You could malloc a char. Or
you could set kernel_buf to point to the char ch you have above.

i.e.

char kernel_buf;
for(i = 0; i < LENGTH; i++){
kernel_buf = *user_buf++;
printf("%c\n",kernel_buf);
}

or

kernel_buf = malloc(sizeof(char));
for(i = 0; i < LENGTH; i++){
*kernel_buf = *user_buf++;
printf("%c\n",*kernel_buf);
}

or

kernel_buf = &ch;
for(i = 0; i < LENGTH; i++){
*kernel_buf = *user_buf++;
printf("%c\n",*kernel_buf);
}

printf("%c\n",*kernel_buf);
}
return 1;

Generally, you return 0 on success.

}

The message I get is:
user_buf:Priya is confused
Segmentation fault

If anyone could help me figure out where I am wrong it would be very
helpful.

Thank you,
Priya


Thank you for your help. I tried according to what you guys told:
#include<stdio.h>

#define LENGTH 5

char *kernel_buf;
char *user_buf = "Priya is confused\n";
kernel_buf = malloc(sizeof(char));

int main(){
int i;
char ch;
printf("user_buf:%s",user_buf);
for(i = 0; i < LENGTH; i++){
*kernel_buf = *(user_buf++);
printf("%c\n",*kernel_buf);
}
return 1;
}

Now I got error telling that there are conflicting types for
kernel_buf.

Thank you,
Priya

On Oct 16, 6:18 pm, "Chris Johnson" <effig...@gmail.comwrote:

priyanka wrote:

Hi there,

I need to copy the first 5 characters stored in a buffer into another
buffer one character at a time. I tried doiing it as under but I got
segmentation errors:

#include<stdio.h>

#define LENGTH 5
char * kernel_buf;Note that this is a char pointer, and by default is likely set to NULL.

char * user_buf = "Priya is confused\n";This you''ve actually given a value, so the user_buf holds the address

of the string "Priya is confused\n".

int main(){
int i;
char ch;
printf("user_buf:%s",user_buf);
for(i = 0; i < LENGTH; i++){
*kernel_buf = *(user_buf++);What is the benefit to using a pointer to a char instead of a char, in

this scenario? You are making things overly complex, and have ended up
attempting to store a value at an invalid address. (Incidentally, this
is where your segfault will be.)

There are several solutions. You could declare kernel_buf to simply be
a char, and get rid of all your asterisks. You could malloc a char. Or
you could set kernel_buf to point to the char ch you have above.

i.e.

char kernel_buf;
for(i = 0; i < LENGTH; i++){
kernel_buf = *user_buf++;
printf("%c\n",kernel_buf);

}or

kernel_buf = malloc(sizeof(char));
for(i = 0; i < LENGTH; i++){
*kernel_buf = *user_buf++;
printf("%c\n",*kernel_buf);

}or

kernel_buf = &ch;
for(i = 0; i < LENGTH; i++){
*kernel_buf = *user_buf++;
printf("%c\n",*kernel_buf);

}

printf("%c\n",*kernel_buf);
}
return 1;Generally, you return 0 on success.

}

The message I get is:
user_buf:Priya is confused
Segmentation fault

If anyone could help me figure out where I am wrong it would be very
helpful.

Thank you,
Priya


这篇关于指针算术帮助的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆