可能重复: strtok不接受:char * str 使用strtok函数时,使用char *而不是char []导致分段错误。 这运行正常: char string[] = “hello world”; char *result = strtok(string, ” “); 这会导致分段错误: char *string = “hello world”; char *result = strtok(string, ” “); 任何人都能解释导致这种行为差异的原因吗?
我正在写一个有两个function的C程序。 一个函数是通常的main函数,另一个函数是指针void函数。 当我尝试在基于Linux的系统中编译我的程序时,我收到以下错误: host1@matrix:~/cprog/practice> gcc -o function1 function1.c prog1.c: In function ‘main’: prog1.c:16:14: error: void value not ignored as it ought to be 这是我的代码: #include void function_1(int *num1, int *num2); int main(void) { int numerator; int denominator; int finalAnswer; printf(“Numerator: “); scanf(“%d”, &numerator); printf(“Denominator: “); scanf(“%d”, &denominator); finalAnswer = function_1(&numerator, &denominator); printf(“%d / %d = […]
我有一个程序问题,这是代码。 int main() { int *p,*q; p=(int*)1000; printf(“%d “,p); q=(int*)2000; printf(“%d”,q); printf(“%d”,(pq)); return 0; } 但回答是这样的 1000 2000 -250 我无法理解pq会发生什么,为什么答案为-250 ?
我已经阅读了很多关于它的线索和问题并阅读了很多答案,但仍然难以理解差异以及何时应该使用什么? 我认为你应该在需要存储数据时使用char *而你不知道它的大小,因为它是动态的。 另外我不确定我是对的,但是如果你声明一个char *并且给它分配一个像这样的文字文本,我不明白我的理解:char * ch =“hi”; 它是一个你无法改变的常量,如果你试图改变它,你只需将ch指向另一个分配的存储空间来保存新字符串? 如果这样写:char ch = malloc(20); 然后你可以改变价值,如果你这样做:char ch [] =“hi”; char pch = ch; 您可以更改值,因为您指向数组并且数组指向ch [0]? 所有用粗体写的都是我从阅读中理解的,虽然我可能对我刚才说的大部分内容都是错的,这就是为什么我需要一个非常好的简单解释,所以我可以一劳永逸地理解差异,当我应该用什么。 编辑: #include main() { char ch[] = “Hello”; char *p1 = ch; char *p2 = p1; char *p3 = *p1; printf(“ch : %s\n”, ch); printf(“p1 address [%d] value is %s\n”, p1, […]
编写程序以分发更改。 用户输入已支付的金额和到期金额。 该程序确定应该给出多少美元,四分之一,一角硬币,一分钱和几分钱作为变化。 向用户询问main()中的两个输入(到期金额和支付金额),然后将这些输入与指向5个参数(美元,四分之一,硬币,镍币,便士)的指针一起发送到名为change()的函数,然后将执行计算每个给出的数量。 从main()打印结果。 所以我的程序编译良好,但我得到了错误的答案。 我究竟做错了什么。 #include #include //function prototype void change( int *d, int *q, int *di, int *n, int *p, int paid, int due ); int main() { //variables int paid; int due; int dollars; int quarters; int dimes; int nickels; int pennies; //reference variables int *d; int *q; int *di; int […]
我有一个结构: struct mystruct { int* pointer; }; structure mystruct* struct_inst; 现在我想更改struct_inst->pointer的值。 我怎样才能做到这一点? 编辑 我没有写它,但pointer已经指向一个用malloc分配的内存区域。
我是C编程的新手。 这只是一个初学者的问题。 我试图在不使用标准函数的情况下实现字符串比较。这里我使用了动态内存分配并使用了fgets() 。 但是没有输入第二个字符串。 任何人都可以帮我指出问题吗? 代码如下。 #include #include int my_strcmp(char*, char*); int main() { int a, n; printf(“enter the length of strings\n”); scanf(“%d”,&n); getchar(); char *s1 = (char *)malloc(n * sizeof(char)); printf(“enter the string1\n”); fgets(s1, n, stdin); getchar(); char *s2 = (char *)malloc(n * sizeof(char)); printf(“enter the string2\n”); fgets(s2, n , stdin); if (s1 […]
我正在尝试调试我正在为UART编写的驱动程序,该驱动程序从串行控制台读取一串chars ,直到用户按下’l’。 该函数在下面称为’getstring()’。 我想检查状态寄存器的内容,以查看设置了哪些位。 状态寄存器偏移2.我需要在调用’getstring()’时打印它。 我可以使用printf() 。 这是UART的寄存器映射。 当我打电话给我怎么能打印出c中寄存器的内容? #define UART 0x00080000 void getchar(char *str) { volatile uint32_t *uart = (volatile uint32_t*) UART; char c = 0; do { while ((uart[2] & (1<<7)) == 0); c = uart[0]; *str++ = c; } while (c!='l'); } `
#include main() { char * ptr; ptr = “hello”; printf(“%p %s” ,”hello”,ptr ); getchar(); } 嗨,我试图清楚地理解如何将数组分配给指针。 当你将一个字符数组分配给chars ptr=”hello”;的指针时,我会注意到ptr=”hello”; 数组衰减到指针,但在这种情况下,我分配一个不在变量内的数组的字符,而不是包含它们的变量“,这种赋值方式是否专门为”Hello”采用内存地址(显然是发生),是否可以修改存储该数组的内存地址中包含的“Hello”中每个元素的值。作为比较,我可以分配一个带有数组的指针,例如像int_ptr = 5,3,4,3;这样含糊不清的东西int_ptr = 5,3,4,3;并且值5,3,4,3位于内存地址中,就像“Hello”一样。如果不是,为什么只能用字符串?谢谢在先进。
我是一名物理专业的学生,主要是用Python和Matlab编程,现在进入C语言以提高我的模拟性能。 简单的问题:Python中有指针吗? Matlab中有指针吗? 如果是的话,我可以使用与C中类似的“轻松”吗? 我知道在Python和Matlab的高级别背后,有很多指针在起作用。 问题是:我可以在Python或Matlab中明确地使用这个C代码: int *p; int someValue = 1; p = &someValue; doSomethingForMe = callSomeFunction(p); 我知道无论如何都可能没有意义(对于大多数应用程序)。 我只是想学习。