指针算术帮助 [英] pointer arithmetic help
问题描述
您好,
我需要将缓冲区中存储的前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 addressof 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, inthis 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屋!