这段代码int main(){ char *p = "%d,a=%d,b=%d"; p+=3; printf(p,5,6,3); }为什么输出a=5,白
时间: 2024-05-20 08:13:59 浏览: 12
这段代码的输出结果不是"a=5,白",而是"6,a=3"。这是因为在代码中,指针p首先被移动3个字符,指向了字符串中的"a=",然后printf函数从p指向的位置开始输出,输出了第一个参数6,接着又输出了字符串中的"a=",然后输出了第二个参数3。因此,最终的输出结果是"6,a=3"。至于为什么没有输出第三个参数5,是因为在指针移动时,已经跳过了第一个格式化字符串"%d"。
相关问题
#include <stdio.h> #include <string.h> #define __STDC_WANT_LIB_EXT1__ 1 int main(void) { /* char multiple[] = "My string"; char *p = &multiple[0]; printf("The address of the first array element : %p\n",p); p = multiple; printf("The address obtained from the array name : %p\n",multiple); */ char multiple[] = "a string"; char *p = multiple; int i; for(i = 0;i < strnlen_s(multiple,sizeof(multiple));++i) { printf("multiple[%d] = %c *(p+%d) = %c &multiple[%d] = %p p+%d = %p\n",i,multiple[i],i,*(p+i),i,&multiple[i],i,p+i); } return 0; }
根据您提供的代码,我注意到您在注释部分使用了一些与数组指针相关的代码,而在注释掉的代码段后面是一个循环打印数组元素的代码段。您可能遇到了以下问题:
1. 注释问题:您注释掉的代码段中有一些与循环打印数组元素的代码无关的注释,这可能导致编译器解析错误。请确保注释正确并符合C语言的语法规则。
2. strnlen_s函数:在您的循环中,您使用了`strnlen_s`函数来获取字符串的长度。`strnlen_s`是C11标准中定义的安全字符串操作函数,但并不是所有编译器都支持它。如果您的编译器不支持该函数,您可以选择使用`strlen`函数来获取字符串长度。
为了解决这些问题,您可以尝试以下修改:
```c
#include <stdio.h>
#include <string.h>
int main(void)
{
char multiple[] = "a string";
char *p = multiple;
int i;
for (i = 0; i < strlen(multiple); ++i)
{
printf("multiple[%d] = %c *(p+%d) = %c &multiple[%d] = %p p+%d = %p\n", i, multiple[i], i, *(p + i), i, &multiple[i], i, p + i);
}
return 0;
}
```
这样修改后,代码应该能够正确编译并打印数组元素的相关信息。请注意,我将`strnlen_s`函数替换为了`strlen`函数,以确保兼容性。如果您的编译器支持`strnlen_s`函数,并且您希望使用它,请确保编译器的设置正确,并包含适当的头文件。
#include<stdio.h> char *pstract (char*,char*); int main(void) { char s1[10]={'a','b','c','d'}; char s2[2]={'e','f'}; char *w; w = pstract(s1,s2); printf("%s",w); return 0; } char *pstract(char *s1,char *s2) { int n; char *p = s1; char *q = s2; n = sizeof(s1)/sizeof(char); p += n-1; while(*q != '\0') { *p = *q; p++; q++; } *++q='\0'; return s1; }
这段代码的功能是将字符串 s2 追加到字符串 s1 的末尾,并返回 s1 的首地址。但是有几个问题需要注意:
1. s1 的长度应该至少为 7,因为 s2 的长度为 2,加上 s1 的最后一个元素需要留给字符串结束符 '\0',所以至少要预留 3 个位置。
2. 在函数中计算 s1 的长度应该使用 strlen 函数来获取字符串的实际长度,而不是使用 sizeof 函数获取数组的大小。
3. 在追加完 s2 后,需要手动在 s1 的末尾添加结束符 '\0',而不是在 s2 的末尾添加。
4. 在返回 s1 的首地址时,应该返回指针变量 p,而不是 s1。因为 p 已经指向了 s1 的末尾。
修改后的代码如下:
```
#include <stdio.h>
#include <string.h>
char *pstract(char*, char*);
int main(void) {
char s1[10] = "abcd";
char s2[2] = "ef";
char *w = pstract(s1, s2);
printf("%s", w);
return 0;
}
char *pstract(char *s1, char *s2) {
int n = strlen(s1);
char *p = s1 + n;
char *q = s2;
while (*q != '\0') {
*p++ = *q++;
}
*p = '\0';
return s1;
}
```
相关推荐
![pdf](https://img-home.csdnimg.cn/images/20210720083512.png)
![](https://img-home.csdnimg.cn/images/20210720083646.png)
![rar](https://img-home.csdnimg.cn/images/20210720083606.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)