473,756 Members | 8,108 Online
Bytes | Software Development & Data Engineering Community
+ Post

Home Posts Topics Members FAQ

new c programmer question

Hi, my name is John and this is my first posting to comp.lang.c. I am
learning C. I am a high school student with interest in programming. I
have a copy of "The C programming language second edition by Brian W
Kernighan and Dennis M Ritchie". I am using gcc version 4.1 on SuSE 9.

Here is my simple question. I want to set a matrix to contain some
values in my program. I want to pass in the matrix array by address in
a function. The compiler is saying:

hello.c:15: warning: assignment from incompatible pointer type

I can see what is wrong but do not have the ability yet to fix it. Here
is the small code where the error is. I would appreciate some advice on
the syntax to use.

Thank you
John

void setupmatrix(int *m[])
{
int x[4][4]=
{
{ 1, 2, 3, 4},
{ 5, 6, 7, 8},
{ 9,10,11,12},
{13,14,15,16}
};
*m=x;
}

Sep 3 '06 #1
14 1926
John Gerrard schrieb:
Hi, my name is John and this is my first posting to comp.lang.c. I am
learning C. I am a high school student with interest in programming. I
have a copy of "The C programming language second edition by Brian W
Kernighan and Dennis M Ritchie". I am using gcc version 4.1 on SuSE 9.
Thank you for provding this background -- this is not strictly
necessary, of course, but helps us with the explanations and
suggestions :-)
You have a good book there, but don't miss the errata:
http://cm.bell-labs.com/cm/cs/cbook/2ediffs.html
Some stuff there is rather subtle but other is not; for example,
use
int main (void)
rather than
main ()
as suggested in your printed version.
Here is my simple question. I want to set a matrix to contain some
values in my program. I want to pass in the matrix array by address in
a function. The compiler is saying:

hello.c:15: warning: assignment from incompatible pointer type

I can see what is wrong but do not have the ability yet to fix it. Here
is the small code where the error is. I would appreciate some advice on
the syntax to use.
Please explain what _you_ think is wrong -- it is possible that
you are mistaken and tried to cure the wrong ill.
It would have been better if you provided a complete, compiling
(but for the warning/error) programme, for the same reason.
void setupmatrix(int *m[])
This is the same as
int **m
Use the latter rather than the former because it is unnecessarily
obscure.
{
int x[4][4]=
{
{ 1, 2, 3, 4},
{ 5, 6, 7, 8},
{ 9,10,11,12},
{13,14,15,16}
};
x is an array with 4 elements of type array with
4 elements of type int with automatic storage duration, i.e.
it lives only from here to the closing brace.
*m=x;
*m is a pointer to int.
&x[0][0] also is a pointer to int.
However, even if you made *m point at the address of x[0][0],
you could not use this address after you returned from the
function -- x does no longer live, so trying to access it
post mortem leads to undefined behaviour, which may be about
anything from your programme crashing, seeming to work, seeming
to work sometimes to having demons flying out your nose.

The question is: What was your aim?
That is, did you want to copy the contents of x?
Then you need not pass an int** but the start address of
either an int array sufficiently large to take the 16 ints
contained in x or an array of arrays with 4 elements of type
int sufficiently large to take at least the 4 "rows" of x.
This makes
void setupmatrix(int *m)
or
void setupmatrix(int (*m)[4])

Or do you want to set some pointer to the start of x? In this
case, you have to make sure that x lives even outside of
setupmatrix() by giving it static storage duration:
static int x[4][4]

In the former two cases, you need to copy the contents of
x to whatever m points to.
int i, j, k;
for (i=0, j=0; j<4; ++j)
for (k=0; k<4; ++k)
m[i++] = x[j][k];
or, in the second case
for (j=0; j<4; ++j)
for (k=0; k<4; ++k)
m[j][k] = x[j][k];
(easier, because m has the same layout as x)
or even using
memcpy(&m[0], &x[0][0], sizeof x);
or
memcpy(&m[0][0], &x[0][0], sizeof x);

The loops are easier to change if m has a different layout
than x, for example if m points to an object with different
number of "columns".
}
Have also a look at the comp.lang.c FAQ at
http://c-faq.com
especially the chapter about arrays and pointers.

Cheers
Michael
--
E-Mail: Mine is an /at/ gmx /dot/ de address.
Sep 3 '06 #2
Thanks for taking the time about to write all this Michael. Your notes
just reinforce how much I don't know. I need to digest and understand
fully what you have written (rather than taking the easy option and
just posting more and more questions). I hope to ask more advanced
questions in the months ahead !

Regards
John
Michael Mair wrote:
John Gerrard schrieb:
Hi, my name is John and this is my first posting to comp.lang.c. I am
learning C. I am a high school student with interest in programming. I
have a copy of "The C programming language second edition by Brian W
Kernighan and Dennis M Ritchie". I am using gcc version 4.1 on SuSE 9.

Thank you for provding this background -- this is not strictly
necessary, of course, but helps us with the explanations and
suggestions :-)
You have a good book there, but don't miss the errata:
http://cm.bell-labs.com/cm/cs/cbook/2ediffs.html
Some stuff there is rather subtle but other is not; for example,
use
int main (void)
rather than
main ()
as suggested in your printed version.
Here is my simple question. I want to set a matrix to contain some
values in my program. I want to pass in the matrix array by address in
a function. The compiler is saying:

hello.c:15: warning: assignment from incompatible pointer type

I can see what is wrong but do not have the ability yet to fix it. Here
is the small code where the error is. I would appreciate some advice on
the syntax to use.

Please explain what _you_ think is wrong -- it is possible that
you are mistaken and tried to cure the wrong ill.
It would have been better if you provided a complete, compiling
(but for the warning/error) programme, for the same reason.
void setupmatrix(int *m[])

This is the same as
int **m
Use the latter rather than the former because it is unnecessarily
obscure.
{
int x[4][4]=
{
{ 1, 2, 3, 4},
{ 5, 6, 7, 8},
{ 9,10,11,12},
{13,14,15,16}
};

x is an array with 4 elements of type array with
4 elements of type int with automatic storage duration, i.e.
it lives only from here to the closing brace.
*m=x;

*m is a pointer to int.
&x[0][0] also is a pointer to int.
However, even if you made *m point at the address of x[0][0],
you could not use this address after you returned from the
function -- x does no longer live, so trying to access it
post mortem leads to undefined behaviour, which may be about
anything from your programme crashing, seeming to work, seeming
to work sometimes to having demons flying out your nose.

The question is: What was your aim?
That is, did you want to copy the contents of x?
Then you need not pass an int** but the start address of
either an int array sufficiently large to take the 16 ints
contained in x or an array of arrays with 4 elements of type
int sufficiently large to take at least the 4 "rows" of x.
This makes
void setupmatrix(int *m)
or
void setupmatrix(int (*m)[4])

Or do you want to set some pointer to the start of x? In this
case, you have to make sure that x lives even outside of
setupmatrix() by giving it static storage duration:
static int x[4][4]

In the former two cases, you need to copy the contents of
x to whatever m points to.
int i, j, k;
for (i=0, j=0; j<4; ++j)
for (k=0; k<4; ++k)
m[i++] = x[j][k];
or, in the second case
for (j=0; j<4; ++j)
for (k=0; k<4; ++k)
m[j][k] = x[j][k];
(easier, because m has the same layout as x)
or even using
memcpy(&m[0], &x[0][0], sizeof x);
or
memcpy(&m[0][0], &x[0][0], sizeof x);

The loops are easier to change if m has a different layout
than x, for example if m points to an object with different
number of "columns".
}

Have also a look at the comp.lang.c FAQ at
http://c-faq.com
especially the chapter about arrays and pointers.

Cheers
Michael
--
E-Mail: Mine is an /at/ gmx /dot/ de address.
Sep 3 '06 #3
John Gerrard wrote:
Hi, my name is John and this is my first posting to comp.lang.c.
Welcome to the group.
I am
learning C. I am a high school student with interest in programming. I
have a copy of "The C programming language second edition by Brian W
Kernighan and Dennis M Ritchie". I am using gcc version 4.1 on SuSE 9.
The compiler and OS are not relevant to your problem, which is good
since we don't deal with compiler/OS specific issues here. If you don't
know whether something is compiler/OS specific then we will be happy to
tell you and try to point you in the correct direction.
Here is my simple question. I want to set a matrix to contain some
values in my program. I want to pass in the matrix array by address in
a function. The compiler is saying:

hello.c:15: warning: assignment from incompatible pointer type
You are correct to be concerned by that warning since it shows a serious
problem. You have others the compiler is not currently warning about.

<OT>
I suggest compiling with
gcc -ansi -pedantic -Wall -O
</OT>
I can see what is wrong but do not have the ability yet to fix it. Here
is the small code where the error is. I would appreciate some advice on
the syntax to use.

Thank you
John

void setupmatrix(int *m[])
{
int x[4][4]=
{
{ 1, 2, 3, 4},
{ 5, 6, 7, 8},
{ 9,10,11,12},
{13,14,15,16}
};
*m=x;
}
OK, now for your problems.

Firstly x is a local variable that will cease to exist as soon as the
function returns and what your code attempts to do is make a pointer to
it available outside the function.

Secondly, [] in a parameter list means pointer not array. I.e.
void foo(int i[])
means *exactly* the same as
void food(int *i)

So, in your case:
void setupmatrix(int *m[])
actually means:
void setupmatrix(int **m)
Now, if you think about it carefully, you will realise that a 2
dimensional array is fundamentally different to a pointer to a pointer.
If you don't believe me go out and get too pointers (sticks will do) and
point one at something, then point one at a piece of paper with the
number 5 written on it, then point the other pointer at the first one.
Then, on a second piece of paper draw out a grid (2 dimensional array)
and put some numbers in it. Then compare the two. You will see that the
pointer to a pointer is very different from the grid (2 dimensional array).

Then we have how I'm guessing you want to use the function. I'm guessing
you have something like:

int main(void)
int arr[4][4];
setupmatrix(arr );
return 0;
}

It would have been useful if you had provided sample usage, then I would
not have to guess.

If I am correct then you also need to understand that you cannot assign
to an array, only to elements of an array.

I suggest you go to the comp.lang.c FAQ available at http://c-faq.com/
and start off by reading section 6. Questions 6.2, 6.3, 6.4, 6.4b, 6.5,
6.6... actually, most of section 6 is relevant to things I think you
have miss-understood!

Also question 7.5a and 7.9 (since I think you have misunderstandin g
there as well).

Once you have read these give it another go and post your attempt,
including a sample main function that calls it, and we will analyse it
and tell you about any problems.
--
Flash Gordon
Sep 3 '06 #4
Michael Mair wrote:
In the former two cases, you need to copy the contents of
x to whatever m points to.
int i, j, k;
for (i=0, j=0; j<4; ++j)
for (k=0; k<4; ++k)
m[i++] = x[j][k];
or, in the second case
for (j=0; j<4; ++j)
for (k=0; k<4; ++k)
m[j][k] = x[j][k];
(easier, because m has the same layout as x)
or even using
memcpy(&m[0], &x[0][0], sizeof x);
or
memcpy(&m[0][0], &x[0][0], sizeof x);

The loops are easier to change if m has a different layout
than x, for example if m points to an object with different
number of "columns".
or, rather than writing loops like that, you can define your
matrix as a struct, and have the compiler do the nasty job:

---
struct matrix { int e[4][4]; };

void
setupmatrix(str uct matrix *m)
{
struct matrix x = {
{
{ 1, 2, 3, 4},
{ 5, 6, 7, 8},
{ 9,10,11,12},
{13,14,15,16}
}
};
*m=x;
}

int
main(void)
{
struct matrix m, n;
setupmatrix(&m) ;
n = m;
m.e[2][2] = 177;
/* .. etc .. */
return 0;
}

Sep 3 '06 #5
Okay thank you for your prompt replies everyone. I had forgotton how
painfully flow learning a new language can be (and humbleing).

I am now compiling my code with

gcc hello.c -ansi -std=c99 -pedantic -Wall -o hello

I have modified the code. It now compiles compiles but gives this
output at runtime.

jad@dhome2:~/matrix$ ./hello
setupmatrix
exit setupmatrix
printmatrix

Segmentation fault
jad@dhome2:~/matrix$
jad@dhome2:~/matrix$
I have included the COMPLETE program at the end of the posting. It
doesn't work but it does represent what I am trying to do. I sort of
know what is wrong but don't have the understanding to correct it yet.
This is what I want to do: 1) allocate memory for a n*n 2D array, 2)
fill it with numbers, 3) print it out, 4) and free up the memory at the
end of it all. I want to allocate the array size at runtime as I will
be, next month at this rate, be multiplying 2-3 matrices together.
Although I would like to say I don't want you to do this for me, I'm
really hoping you don't take that too seriously because I need
something working to see where I should be going.

Thank you all for your help in advance.
John

#include <stdio.h>
#include <stdlib.h>

/*setup a n*n matrix and fill it with 1, 2, 3, 4*/
/*============== =============== =============== ==*/
int** setupmatrix(int nSize)
{
printf("setupma trix\r\n");
int nByNArraySize=n Size*nSize*size of(int);
int *arr=malloc(nBy NArraySize);
for (int i=0;i<nByNArray Size;i++)
arr[i]=0;
printf("exit setupmatrix\r\n ");
return (int **)arr;
}

/*print matrix */
/*=============*/
void printmatrix(int **mp,int nSize)
{
printf("printma trix\r\n");
for (int i=0;i<nSize;i++ )
{
printf("\r\n");
for (int j=0;i<nSize;j++ )
{
printf("%3d",mp[i][j]);
}
}
printf("exit printmatrix\r\n ");
}

/*return memory from matrix */
/*============== ============*/
void freematrix(int **mf)
{
printf("freemat rix\r\n");
free(mf);
printf("exit freematrix\r\n" );
}

int main(void)
{
int ARRSIZE1=4;
int **m1=setupmatri x(ARRSIZE1);
printmatrix(m1, ARRSIZE1);
freematrix(m1);

/*
int ARRSIZE2=3;
int **m2=setupmatri x(ARRSIZE2);
printmatrix(m2, ARRSIZE2);
freematrix(m2)
*/
return 0;
}

Sep 3 '06 #6

Michael Mair wrote:
void setupmatrix(int *m)
or
void setupmatrix(int (*m)[4])
<snip>
static int x[4][4]
<snip>
or even using
memcpy(&m[0], &x[0][0], sizeof x);
or
memcpy(&m[0][0], &x[0][0], sizeof x);
Will the second memcpy fail if the argument to 'void setupmatrix(int
(*m)[4])' is 'int (*m1)[4];'? Because the structures of m and x are
different. The elements in x are stored continuously while the elements
in m are not. And I think it works if the argument is 'int m2[4][4]'.
Am I right?

Sep 3 '06 #7
John Gerrard wrote:
>
Thanks for taking the time about to write all this Michael. Your
notes just reinforce how much I don't know. I need to digest and
understand fully what you have written (rather than taking the
easy option and just posting more and more questions). I hope to
ask more advanced questions in the months ahead !
Now, as a new user, you need to learn to post correctly. Never
top-post. Your reply belongs after (or intermixed with) the
snipped material which you quote. The snipping removes anything
not germane to your reply.

See the following links.

--
Some informative links:
news:news.annou nce.newusers
http://www.geocities.com/nnqweb/
http://www.catb.org/~esr/faqs/smart-questions.html
http://www.caliburn.nl/topposting.html
http://www.netmeister.org/news/learn2quote.html

Sep 3 '06 #8
"John Gerrard" writes:

< I only address one of your questions here>
Okay thank you for your prompt replies everyone. I had forgotton how
painfully flow learning a new language can be (and humbleing).

I am now compiling my code with

gcc hello.c -ansi -std=c99 -pedantic -Wall -o hello

I have modified the code. It now compiles compiles but gives this
output at runtime.

jad@dhome2:~/matrix$ ./hello
setupmatrix
exit setupmatrix
printmatrix

Segmentation fault
jad@dhome2:~/matrix$
jad@dhome2:~/matrix$
I have included the COMPLETE program at the end of the posting. It
doesn't work but it does represent what I am trying to do. I sort of
know what is wrong but don't have the understanding to correct it yet.
This is what I want to do: 1) allocate memory for a n*n 2D array, 2)
fill it with numbers, 3) print it out, 4) and free up the memory at the
end of it all. I want to allocate the array size at runtime as I will
be, next month at this rate, be multiplying 2-3 matrices together.
Although I would like to say I don't want you to do this for me, I'm
really hoping you don't take that too seriously because I need
something working to see where I should be going.

Thank you all for your help in advance.
John

#include <stdio.h>
#include <stdlib.h>

/*setup a n*n matrix and fill it with 1, 2, 3, 4*/
/*============== =============== =============== ==*/
int** setupmatrix(int nSize)
{
printf("setupma trix\r\n");
int nByNArraySize=n Size*nSize*size of(int);
int *arr=malloc(nBy NArraySize);
for (int i=0;i<nByNArray Size;i++)
arr[i]=0;
printf("exit setupmatrix\r\n ");
return (int **)arr;
}

/*print matrix */
/*=============*/
void printmatrix(int **mp,int nSize)
{
printf("printma trix\r\n");
for (int i=0;i<nSize;i++ )
{
printf("\r\n");
for (int j=0;i<nSize;j++ )
{
printf("%3d",mp[i][j]);
}
}
printf("exit printmatrix\r\n ");
}

/*return memory from matrix */
/*============== ============*/
void freematrix(int **mf)
{
printf("freemat rix\r\n");
free(mf);
printf("exit freematrix\r\n" );
}

int main(void)
{
int ARRSIZE1=4;
int **m1=setupmatri x(ARRSIZE1);
printmatrix(m1, ARRSIZE1);
freematrix(m1)
You can only free things you obtained by malloc() or some other allocating
call. m1 is an "auto" (automatic) variable which is freed up automatically
when you exit a function. Since this is in main the end of the function is
also the end of the program.

Look up malloc(), free() and auto.
auto is a "storage class specifier" and if you do not provide one for a
variable, it will implicitly be treated as auto. You should try to defer
your understanding of such specifiers, they tend towards the exotic end of
the spectrum - for example, register is hardly ever used in current
programming practice.
>
/*
int ARRSIZE2=3;
int **m2=setupmatri x(ARRSIZE2);
printmatrix(m2, ARRSIZE2);
freematrix(m2)
*/
return 0;
}

Sep 3 '06 #9
John Gerrard posted:
void setupmatrix(int *m[])
{
int x[4][4]=
{
{ 1, 2, 3, 4},
{ 5, 6, 7, 8},
{ 9,10,11,12},
{13,14,15,16}
};
*m=x;
}

You can't assign one array to another (even if their dimensions are
identical), e.g.:

int arr1[4] = {0};
int arr2[4] = {0};

arr1 = arr2; /* Compiler ERROR */

There are a few ways to write your function; here's an example:

#include <string.h>

void SetupMatrix(int (*const p)[4][4])
{
int const temp[4][4] = {
{ 1, 2, 3, 4},
{ 5, 6, 7, 8},
{ 9,10,11,12},
{13,14,15,16}
};

memcpy(p,&temp, sizeof*p);
}

#include <stdio.h>

int main(void)
{
unsigned i,j;

int matrix[4][4];

SetupMatrix(&ma trix);

for(i=0; i!=4; ++i)
{
for(j=0; j!=4; ++j)
{
printf("%d\n",m atrix[i][j]);
}
}

system("PAUSE") ;
}
There are more efficient ways of achieving this.

--

Frederick Gotham
Sep 3 '06 #10

This thread has been closed and replies have been disabled. Please start a new discussion.

Similar topics

45
16910
by: Market Mutant | last post by:
I just wonder job selections, job openings and salary level of PHP programer or Perl programmer comparing to Java programmers. Is Java programmer's salary has a minimal of 60K in US? Are there many PHP jobs?
14
2687
by: Daniel Chartier | last post by:
Hello. I work in the paper industry and we recently had someone (the original author) from within the company make a program for preventive maintenance. However, it had some bugs and we wanted to add stuff to it, bu tthe original author/programmer was leaving, so we called in a free agent programmer. The free agent spoke with the original programmer and myself for a day. He fixed afew bugs. For the other bugs and the many...
15
10550
by: Randall Smith | last post by:
I've been programming in Python for about 2 years. I think it offers the best combination of simplicity and power of any language I have explored. As I write more and larger and complex programs, I need to code better. By better I mean clearer, cleaner, more efficient and maintainable. As the subject states, I want to become a really good Python programmer. I learn most everything from random examples and experience and that's good,...
12
1884
by: Computer Whizz | last post by:
Hiya guys, I saw this (C++ Programmer's Reference by Herbert Schildt) book in the library today, and wondered what the experienced programmer thought about it before I decided to dive in and get it. Most of the posts I've read seem to have an opinion of a wide variety of books, yet I did a google search of this group and didn't find much - maybe the odd mention of the author.
29
5354
by: jeffc | last post by:
How would you answer a question like this in an interview? I'm not interested in gathering the average of folks on this forum. I'm interested in a strategy for a) evaluating yourself objectively b) actually answering the question (which might or might not involve the anser you came up with in a)
5
2726
by: jrefactors | last post by:
when people say unix programmer, does it mean they write programs in unix environment,and those programs are run in unix platform? it is not necessary they are using unix function calls? I heard most of the time unix programmers are C and C++ programmers. please advise. thanks!!
72
5888
by: E. Robert Tisdale | last post by:
What makes a good C/C++ programmer? Would you be surprised if I told you that it has almost nothing to do with your knowledge of C or C++? There isn't much difference in productivity, for example, between a C/C++ programmers with a few weeks of experience and a C/C++ programmer with years of experience. You don't really need to understand the subtle details or use the obscure features of either language
23
2705
by: Steve Jorgensen | last post by:
Hi all, I'm working on a project through a consulting company, and I'm writing some database code for use in another programmer's project in Excel/VBA. The other programmer is working through the same consulting company. I did not initially know this other programmer's experience level, but he seemed down to earth and friendly. I saw some signs of trouble after having him try to integrate some of my code, but chalked it up to him...
13
2504
by: BK | last post by:
Our .Net team has just inherited a junior programmer that we need to get up to speed as quickly as possible. Unfortunately, his skill set is largely Access with some VB6 and ASP classic experience. We employ some parts of XP such as pair programming, and this should help. Other than books, does anyone have any suggestions? His skill set is pretty antiquated and we need to get him up to speed as quickly as possible so any suggestions...
65
5282
by: Chris Carlen | last post by:
Hi: From what I've read of OOP, I don't get it. I have also found some articles profoundly critical of OOP. I tend to relate to these articles. However, those articles were no more objective than the descriptions of OOP I've read in making a case. Ie., what objective data/studies/research indicates that a particular problem can be solved more quickly by the programmer, or that the solution is more efficient in execution time/memory...
0
9456
marktang
by: marktang | last post by:
ONU (Optical Network Unit) is one of the key components for providing high-speed Internet services. Its primary function is to act as an endpoint device located at the user's premises. However, people are often confused as to whether an ONU can Work As a Router. In this blog post, we’ll explore What is ONU, What Is Router, ONU & Router’s main usage, and What is the difference between ONU and Router. Let’s take a closer look ! Part I. Meaning of...
0
9275
by: Hystou | last post by:
Most computers default to English, but sometimes we require a different language, especially when relocating. Forgot to request a specific language before your computer shipped? No problem! You can effortlessly switch the default language on Windows 10 without reinstalling. I'll walk you through it. First, let's disable language synchronization. With a Microsoft account, language settings sync across devices. To prevent any complications,...
0
9873
jinu1996
by: jinu1996 | last post by:
In today's digital age, having a compelling online presence is paramount for businesses aiming to thrive in a competitive landscape. At the heart of this digital strategy lies an intricately woven tapestry of website design and digital marketing. It's not merely about having a website; it's about crafting an immersive digital experience that captivates audiences and drives business growth. The Art of Business Website Design Your website is...
1
9846
by: Hystou | last post by:
Overview: Windows 11 and 10 have less user interface control over operating system update behaviour than previous versions of Windows. In Windows 11 and 10, there is no way to turn off the Windows Update option using the Control Panel or Settings app; it automatically checks for updates and installs any it finds, whether you like it or not. For most users, this new feature is actually very convenient. If you want to control the update process,...
1
7248
isladogs
by: isladogs | last post by:
The next Access Europe User Group meeting will be on Wednesday 1 May 2024 starting at 18:00 UK time (6PM UTC+1) and finishing by 19:30 (7.30PM). In this session, we are pleased to welcome a new presenter, Adolph Dupré who will be discussing some powerful techniques for using class modules. He will explain when you may want to use classes instead of User Defined Types (UDT). For example, to manage the data in unbound forms. Adolph will...
0
5142
by: TSSRALBI | last post by:
Hello I'm a network technician in training and I need your help. I am currently learning how to create and manage the different types of VPNs and I have a question about LAN-to-LAN VPNs. The last exercise I practiced was to create a LAN-to-LAN VPN between two Pfsense firewalls, by using IPSEC protocols. I succeeded, with both firewalls in the same network. But I'm wondering if it's possible to do the same thing, with 2 Pfsense firewalls...
1
3806
by: 6302768590 | last post by:
Hai team i want code for transfer the data from one system to another through IP address by using C# our system has to for every 5mins then we have to update the data what the data is updated we have to send another system
2
3359
muto222
by: muto222 | last post by:
How can i add a mobile payment intergratation into php mysql website.
3
2666
bsmnconsultancy
by: bsmnconsultancy | last post by:
In today's digital era, a well-designed website is crucial for businesses looking to succeed. Whether you're a small business owner or a large corporation in Toronto, having a strong online presence can significantly impact your brand's success. BSMN Consultancy, a leader in Website Development in Toronto offers valuable insights into creating effective websites that not only look great but also perform exceptionally well. In this comprehensive...

By using Bytes.com and it's services, you agree to our Privacy Policy and Terms of Use.

To disable or enable advertisements and analytics tracking please visit the manage ads & tracking page.